import androidx.annotation.NonNull;
+import org.opencv.core.Mat;
+import org.opencv.imgcodecs.Imgcodecs;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+
+import static org.opencv.core.CvType.CV_8UC1;
+import static org.opencv.imgcodecs.Imgcodecs.IMREAD_COLOR;
public class CamTest implements View.OnClickListener, ILiveViewImage
{
outputFile(receivedData);
/////// Bitmap画像を作る... //////
+ final Bitmap imageData = getBitmap(receivedData);
+/*
final Bitmap imageData = BitmapFactory.decodeByteArray(dataValue, 18, (dataValue.length - 18));
if (imageData == null)
{
{
Log.v(TAG, "imageData : " + imageData.getByteCount() + " bytes.");
}
-
+*/
////// 画像を更新する
activity.runOnUiThread(new Runnable() {
@Override
e.printStackTrace();
}
}
+
+ private Bitmap getBitmap(ReceivedDataHolder receivedData)
+ {
+ Bitmap bitmap;
+ try {
+ final ByteBuffer dataValue = receivedData.getByteBuffer();
+ final int dataLength = receivedData.getLength();
+// final byte[] imageBytes = Arrays.copyOfRange(dataValue, 18, dataValue.length);
+
+ // OpenCVのデータ型に変換
+ Mat rawData = new Mat( 1,dataLength, CV_8UC1, dataValue);
+ Mat decodedImage = Imgcodecs.imdecode(rawData, IMREAD_COLOR);
+ bitmap = Bitmap.createBitmap(decodedImage.width(), decodedImage.height(), Bitmap.Config.ARGB_8888);
+ //org.opencv.android.Utils.matToBitmap(decodedImage, bitmap);
+
+ rawData.release();
+ decodedImage.release();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ bitmap = null;
+ }
+ return (bitmap);
+ }
}
import java.io.BufferedReader;
import java.io.DataOutputStream;
+import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
class Communication
{
private final String TAG = toString();
- private static final int BUFFER_SIZE = 131072 + 4;
+ private static final int BUFFER_SIZE = 1024 * 1024 + 8;
private static final int CONTROL_PORT = 55740;
private static final int ASYNC_RESPONSE_PORT = 55741;
ReceivedDataHolder receive_from_camera()
{
+/*
InputStreamReader isr;
char[] char_array = new char[BUFFER_SIZE];
try
e.printStackTrace();
}
return (new ReceivedDataHolder(char_array, 0));
+*/
+ try
+ {
+ byte[] byte_array = new byte[BUFFER_SIZE];
+ InputStream is = socket.getInputStream();
+ if (is != null)
+ {
+ int read_bytes = is.read(byte_array, 0, BUFFER_SIZE);
+ Log.v(TAG, "receive_from_camera() : " + read_bytes + " bytes.");
+ return (new ReceivedDataHolder(byte_array, read_bytes));
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (new ReceivedDataHolder(new byte[0], 0));
}
private void dump_bytes(String header, byte[] data)
public class ReceivedDataHolder
{
private final byte[] data;
+ private static final int DATA_OFFSET = 18;
- public ReceivedDataHolder(byte[] data, int length)
+ ReceivedDataHolder(byte[] data, int length)
{
this.data = Arrays.copyOfRange(data, 0, length);
}
return (data);
}
+ public ByteBuffer getByteBuffer()
+ {
+ ByteBuffer dataBuffer = ByteBuffer.allocateDirect(data.length - DATA_OFFSET);
+ dataBuffer.put(Arrays.copyOfRange(data, DATA_OFFSET, (data.length - DATA_OFFSET)));
+ return (dataBuffer);
+ }
+
+ public int getLength()
+ {
+ return (data.length - DATA_OFFSET);
+ }
+
/**
* char[]からbyte[]に変換する
* (https://stackoverflow.com/questions/5513144/converting-char-to-byte より)