• R/O
  • HTTP
  • SSH
  • HTTPS

FujiCam: Commit

Fujifilm X Series Remote Control for Android (Prototype)

Fujifilm Xシリーズカメラの遠隔操作アプリ for Android (プロトタイプ)


Commit MetaInfo

Revisãod7bb49e4815de46c59bd335fcd8179dbd307a4cc (tree)
Hora2019-05-06 09:20:37
AutorMRSa <mrsa@myad...>
CommiterMRSa

Mensagem de Log

ライブビューデータを拾うために検討中。その5。

Mudança Sumário

Diff

--- a/app/src/main/java/net/osdn/gokigen/cameratest/camtest/CamTest.java
+++ b/app/src/main/java/net/osdn/gokigen/cameratest/camtest/CamTest.java
@@ -18,10 +18,18 @@ import net.osdn.gokigen.cameratest.fuji.ReceivedDataHolder;
1818
1919 import androidx.annotation.NonNull;
2020
21+import org.opencv.core.Mat;
22+import org.opencv.imgcodecs.Imgcodecs;
23+
2124 import java.io.File;
2225 import java.io.FileInputStream;
2326 import java.io.FileOutputStream;
2427 import java.io.FileWriter;
28+import java.nio.ByteBuffer;
29+import java.util.Arrays;
30+
31+import static org.opencv.core.CvType.CV_8UC1;
32+import static org.opencv.imgcodecs.Imgcodecs.IMREAD_COLOR;
2533
2634 public class CamTest implements View.OnClickListener, ILiveViewImage
2735 {
@@ -160,6 +168,8 @@ public class CamTest implements View.OnClickListener, ILiveViewImage
160168 outputFile(receivedData);
161169
162170 /////// Bitmap画像を作る... //////
171+ final Bitmap imageData = getBitmap(receivedData);
172+/*
163173 final Bitmap imageData = BitmapFactory.decodeByteArray(dataValue, 18, (dataValue.length - 18));
164174 if (imageData == null)
165175 {
@@ -169,7 +179,7 @@ public class CamTest implements View.OnClickListener, ILiveViewImage
169179 {
170180 Log.v(TAG, "imageData : " + imageData.getByteCount() + " bytes.");
171181 }
172-
182+*/
173183 ////// 画像を更新する
174184 activity.runOnUiThread(new Runnable() {
175185 @Override
@@ -331,4 +341,29 @@ public class CamTest implements View.OnClickListener, ILiveViewImage
331341 e.printStackTrace();
332342 }
333343 }
344+
345+ private Bitmap getBitmap(ReceivedDataHolder receivedData)
346+ {
347+ Bitmap bitmap;
348+ try {
349+ final ByteBuffer dataValue = receivedData.getByteBuffer();
350+ final int dataLength = receivedData.getLength();
351+// final byte[] imageBytes = Arrays.copyOfRange(dataValue, 18, dataValue.length);
352+
353+ // OpenCVのデータ型に変換
354+ Mat rawData = new Mat( 1,dataLength, CV_8UC1, dataValue);
355+ Mat decodedImage = Imgcodecs.imdecode(rawData, IMREAD_COLOR);
356+ bitmap = Bitmap.createBitmap(decodedImage.width(), decodedImage.height(), Bitmap.Config.ARGB_8888);
357+ //org.opencv.android.Utils.matToBitmap(decodedImage, bitmap);
358+
359+ rawData.release();
360+ decodedImage.release();
361+ }
362+ catch (Exception e)
363+ {
364+ e.printStackTrace();
365+ bitmap = null;
366+ }
367+ return (bitmap);
368+ }
334369 }
--- a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/Communication.java
+++ b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/Communication.java
@@ -6,13 +6,14 @@ import androidx.annotation.NonNull;
66
77 import java.io.BufferedReader;
88 import java.io.DataOutputStream;
9+import java.io.InputStream;
910 import java.io.InputStreamReader;
1011 import java.net.Socket;
1112
1213 class Communication
1314 {
1415 private final String TAG = toString();
15- private static final int BUFFER_SIZE = 131072 + 4;
16+ private static final int BUFFER_SIZE = 1024 * 1024 + 8;
1617
1718 private static final int CONTROL_PORT = 55740;
1819 private static final int ASYNC_RESPONSE_PORT = 55741;
@@ -110,6 +111,7 @@ class Communication
110111
111112 ReceivedDataHolder receive_from_camera()
112113 {
114+/*
113115 InputStreamReader isr;
114116 char[] char_array = new char[BUFFER_SIZE];
115117 try
@@ -125,6 +127,23 @@ class Communication
125127 e.printStackTrace();
126128 }
127129 return (new ReceivedDataHolder(char_array, 0));
130+*/
131+ try
132+ {
133+ byte[] byte_array = new byte[BUFFER_SIZE];
134+ InputStream is = socket.getInputStream();
135+ if (is != null)
136+ {
137+ int read_bytes = is.read(byte_array, 0, BUFFER_SIZE);
138+ Log.v(TAG, "receive_from_camera() : " + read_bytes + " bytes.");
139+ return (new ReceivedDataHolder(byte_array, read_bytes));
140+ }
141+ }
142+ catch (Exception e)
143+ {
144+ e.printStackTrace();
145+ }
146+ return (new ReceivedDataHolder(new byte[0], 0));
128147 }
129148
130149 private void dump_bytes(String header, byte[] data)
--- a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/ReceivedDataHolder.java
+++ b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/ReceivedDataHolder.java
@@ -12,8 +12,9 @@ import java.util.Arrays;
1212 public class ReceivedDataHolder
1313 {
1414 private final byte[] data;
15+ private static final int DATA_OFFSET = 18;
1516
16- public ReceivedDataHolder(byte[] data, int length)
17+ ReceivedDataHolder(byte[] data, int length)
1718 {
1819 this.data = Arrays.copyOfRange(data, 0, length);
1920 }
@@ -35,6 +36,18 @@ public class ReceivedDataHolder
3536 return (data);
3637 }
3738
39+ public ByteBuffer getByteBuffer()
40+ {
41+ ByteBuffer dataBuffer = ByteBuffer.allocateDirect(data.length - DATA_OFFSET);
42+ dataBuffer.put(Arrays.copyOfRange(data, DATA_OFFSET, (data.length - DATA_OFFSET)));
43+ return (dataBuffer);
44+ }
45+
46+ public int getLength()
47+ {
48+ return (data.length - DATA_OFFSET);
49+ }
50+
3851 /**
3952 * char[]からbyte[]に変換する
4053 * (https://stackoverflow.com/questions/5513144/converting-char-to-byte より)
Show on old repository browser