From 3b53a5d8aea98f663f7d6650f33d1832ad970d3c Mon Sep 17 00:00:00 2001 From: MRSa Date: Mon, 6 May 2019 20:39:14 +0900 Subject: [PATCH] =?utf8?q?=E3=83=A9=E3=82=A4=E3=83=96=E3=83=93=E3=83=A5?= =?utf8?q?=E3=83=BC=E3=81=8C=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86?= =?utf8?q?=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../net/osdn/gokigen/cameratest/MainActivity.java | 10 +- .../osdn/gokigen/cameratest/camtest/CamTest.java | 188 +++++---------------- .../cameratest/fuji/FujiStreamReceiver.java | 17 +- .../cameratest/fuji/ReceivedDataHolder.java | 46 +---- app/src/main/res/menu/menu_main.xml | 8 +- app/src/main/res/values/strings.xml | 4 +- 6 files changed, 58 insertions(+), 215 deletions(-) diff --git a/app/src/main/java/net/osdn/gokigen/cameratest/MainActivity.java b/app/src/main/java/net/osdn/gokigen/cameratest/MainActivity.java index 1f3f494..a9caab9 100644 --- a/app/src/main/java/net/osdn/gokigen/cameratest/MainActivity.java +++ b/app/src/main/java/net/osdn/gokigen/cameratest/MainActivity.java @@ -120,7 +120,7 @@ public class MainActivity extends AppCompatActivity * */ @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); prepareClass(); @@ -175,14 +175,14 @@ public class MainActivity extends AppCompatActivity exitApplication(); return (true); } - if (id == R.id.action_add_value) + if (id == R.id.action_up_value) { - testTarget.addValue(); + testTarget.valueUp(); return (true); } - if (id == R.id.action_delete_value) + if (id == R.id.action_down_value) { - testTarget.deleteValue(); + testTarget.valueDown(); return (true); } return super.onOptionsItemSelected(item); diff --git a/app/src/main/java/net/osdn/gokigen/cameratest/camtest/CamTest.java b/app/src/main/java/net/osdn/gokigen/cameratest/camtest/CamTest.java index 6899117..e89b583 100644 --- 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,23 +18,10 @@ import net.osdn.gokigen.cameratest.fuji.ReceivedDataHolder; import androidx.annotation.NonNull; -import org.opencv.android.Utils; -import org.opencv.core.Mat; -import org.opencv.core.Size; -import org.opencv.imgcodecs.Imgcodecs; - import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; -import java.io.FileWriter; -import java.io.InputStream; -import java.nio.ByteBuffer; -import java.util.Arrays; -import static org.opencv.core.CvType.CV_16UC3; -import static org.opencv.core.CvType.CV_8UC1; -import static org.opencv.core.CvType.CV_8UC3; -import static org.opencv.imgcodecs.Imgcodecs.IMREAD_COLOR; public class CamTest implements View.OnClickListener, ILiveViewImage { @@ -43,8 +30,7 @@ public class CamTest implements View.OnClickListener, ILiveViewImage private TextView textview; private Connection connection; private FileOutputStream outputStream = null; - private FileWriter fileWriter = null; - private int offsetSize = 0; + private int offsetSize = 18; // 4byte: データサイズ、14byte: (謎の)ヘッダ public CamTest(@NonNull Activity activity) { @@ -87,20 +73,18 @@ public class CamTest implements View.OnClickListener, ILiveViewImage showMessageText("BBBB"); } - public void addValue() + public void valueUp() { - Log.v(TAG, "add value"); - + Log.v(TAG, "value UP"); offsetSize++; - showMessageText(" OFFSET VALUE : " + offsetSize); + showMessageText("OFFSET : " + offsetSize); } - public void deleteValue() + public void valueDown() { - Log.v(TAG, "delete value"); - + Log.v(TAG, "value DOWN"); offsetSize--; - showMessageText(" OFFSET VALUE : " + offsetSize); + showMessageText("OFFSET : " + offsetSize); } @@ -182,8 +166,8 @@ public class CamTest implements View.OnClickListener, ILiveViewImage try { final byte[] dataValue = receivedData.getData(); - byte[] startJpegMarker = {(byte)0xff, (byte)0xd8}; - byte[] endJpegMarker = {(byte)0xff, (byte)0xd9}; + //byte[] startJpegMarker = {(byte)0xff, (byte)0xd8}; + //byte[] endJpegMarker = {(byte)0xff, (byte)0xd9}; Log.v(TAG, "Image : "+ dataValue.length + " bytes."); @@ -192,34 +176,23 @@ public class CamTest implements View.OnClickListener, ILiveViewImage /////// Bitmap画像を作る... ////// final Bitmap imageData = getBitmap(receivedData); -/* - final Bitmap imageData = BitmapFactory.decodeByteArray(dataValue, 18, (dataValue.length - 18)); - if (imageData == null) + if (imageData != null) { - Log.v(TAG, "imageData is null..."); - } - else - { - Log.v(TAG, "imageData : " + imageData.getByteCount() + " bytes."); - } -*/ - ////// 画像を更新する - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - try - { - // ビットマップイメージを表示する。 - ImageView view = activity.findViewById(R.id.imageView); - view.setImageBitmap(imageData); - view.invalidate(); - } - catch (Throwable e) - { - e.printStackTrace(); + ////// 画像を更新する + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + try { + // ビットマップイメージを表示する。 + ImageView view = activity.findViewById(R.id.imageView); + view.setImageBitmap(imageData); + view.invalidate(); + } catch (Throwable e) { + e.printStackTrace(); + } } - } - }); + }); + } } catch (Throwable e) { @@ -267,12 +240,6 @@ public class CamTest implements View.OnClickListener, ILiveViewImage final byte[] byteData = receivedData.getData(); outputStream.write(byteData, 0, byteData.length); } - if (fileWriter != null) - { - final char[] charData = receivedData.getCharData(); - fileWriter.write(charData, 0, charData.length); - fileWriter.flush(); - } } catch (Exception e) { @@ -282,25 +249,17 @@ public class CamTest implements View.OnClickListener, ILiveViewImage private void prepareFile() { - boolean useStream = true; try { final String directoryPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath() + "/AirA01a/"; final String outputFileName = "camtest.bin"; File filepath = new File(directoryPath.toLowerCase(), outputFileName.toLowerCase()); - if (useStream) { - outputStream = new FileOutputStream(filepath); - fileWriter = null; - } else { - outputStream = null; - fileWriter = new FileWriter(filepath); - } - } + outputStream = new FileOutputStream(filepath); + } catch (Exception e) { e.printStackTrace(); outputStream = null; - fileWriter = null; } } @@ -309,11 +268,7 @@ public class CamTest implements View.OnClickListener, ILiveViewImage Thread thread = new Thread(new Runnable() { @Override public void run() { - if (offsetSize < 0) { readImageFileImpl(readFileName); - } else { - readImageFileImpl2nd(readFileName); - } } }); try @@ -369,94 +324,27 @@ public class CamTest implements View.OnClickListener, ILiveViewImage } } - private void readImageFileImpl2nd(final String readFileName) + + private Bitmap getBitmap(ReceivedDataHolder receivedData) { try { - Log.v(TAG, "readImageFileImpl2nd() : " + readFileName); - final String directoryPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath() + "/AirA01a/"; - File filepath = new File(directoryPath.toLowerCase(), readFileName.toLowerCase()); - InputStream istr = new FileInputStream(filepath); - - byte[] readBuffer = new byte[1024 * 1024]; - int dataSize = istr.read(readBuffer, 0, readBuffer.length); - istr.close(); - - for (offsetSize = 4096; offsetSize >= 0; offsetSize--) + final byte[] data = receivedData.getData(); + final Bitmap imageData = BitmapFactory.decodeByteArray(data, offsetSize, (data.length - offsetSize)); + if (imageData == null) { - try - { - Log.v(TAG, "readImageFileImpl2nd() : readSize is " + dataSize + ", offset : " + offsetSize); - - byte[] buffer = Arrays.copyOfRange(readBuffer, offsetSize, dataSize - offsetSize); - - // OpenCVのデータ型に変換 - Mat rawData = new Mat(1, buffer.length, CV_8UC3); - rawData.put(0, 0, buffer); - Mat decodedImage = Imgcodecs.imdecode(rawData, IMREAD_COLOR); - - final Bitmap imageData = Bitmap.createBitmap(decodedImage.width(), decodedImage.height(), Bitmap.Config.ARGB_8888); - Utils.matToBitmap(decodedImage, imageData); - - Log.v(TAG, "readImageFileImpl2nd() : bitmap is " + imageData.getByteCount() + " bytes."); - - ////// 画像表示を更新する ////// - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - try - { - // ビットマップイメージを表示する。 - ImageView view = activity.findViewById(R.id.information_view); - view.setImageBitmap(imageData); - view.invalidate(); - } - catch (Throwable e) - { - e.printStackTrace(); - } - } - }); - break; - } - catch (Throwable t) - { - t.printStackTrace(); - } + Log.v(TAG, "readImageFileImpl() : bitmap is NULL. (offset : " + offsetSize + ")"); } - Log.v(TAG, "readImageFileImpl2nd() is finished."); - offsetSize = 0; - } - catch (Throwable e) - { - 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_8UC3, 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(); + else + { + Log.v(TAG, "readImageFileImpl() : bitmap is " + imageData.getByteCount() + " bytes."); + } + return (imageData); } catch (Exception e) { e.printStackTrace(); - bitmap = null; } - return (bitmap); + return (null); } } diff --git a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/FujiStreamReceiver.java b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/FujiStreamReceiver.java index 190dd5b..535426d 100644 --- a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/FujiStreamReceiver.java +++ b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/FujiStreamReceiver.java @@ -1,10 +1,8 @@ package net.osdn.gokigen.cameratest.fuji; import android.util.Log; - import androidx.annotation.NonNull; - -import java.io.InputStreamReader; +import java.io.InputStream; import java.net.Socket; class FujiStreamReceiver @@ -62,13 +60,12 @@ class FujiStreamReceiver private void startReceive(Socket socket) { /**/ - InputStreamReader isr; - char[] char_array; + InputStream isr; + byte[] byteArray; try { - isr = new InputStreamReader(socket.getInputStream()); - char_array = new char[BUFFER_SIZE]; - + isr = socket.getInputStream(); + byteArray = new byte[BUFFER_SIZE]; } catch (Exception e) { @@ -95,8 +92,8 @@ class FujiStreamReceiver } */ /**/ - int read_bytes = isr.read(char_array, 0, BUFFER_SIZE); - imageViewer.updateImage(new ReceivedDataHolder(char_array, read_bytes)); + int read_bytes = isr.read(byteArray, 0, BUFFER_SIZE); + imageViewer.updateImage(new ReceivedDataHolder(byteArray, read_bytes)); /**/ Thread.sleep(WAIT_MS); } diff --git a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/ReceivedDataHolder.java b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/ReceivedDataHolder.java index e28f0eb..9dae746 100644 --- a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/ReceivedDataHolder.java +++ b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/ReceivedDataHolder.java @@ -1,8 +1,5 @@ package net.osdn.gokigen.cameratest.fuji; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.Charset; import java.util.Arrays; /** @@ -12,52 +9,13 @@ import java.util.Arrays; public class ReceivedDataHolder { private final byte[] data; - private static final int DATA_OFFSET = 18; - ReceivedDataHolder(byte[] data, int length) - { + ReceivedDataHolder(byte[] data, int length) { this.data = Arrays.copyOfRange(data, 0, length); - } - - ReceivedDataHolder(char[] data, int length) - { - byte[] convertedData = toBytes(data); - this.data = Arrays.copyOfRange(convertedData, 0, length); - } - - public char[] getCharData() - { - String text = new String(data); - return (text.toCharArray()); } - public byte[] getData() - { + public byte[] getData() { 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 より) - */ - private byte[] toBytes(char[] chars) - { - CharBuffer charBuffer = CharBuffer.wrap(chars); - ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(charBuffer); - byte[] bytes = Arrays.copyOfRange(byteBuffer.array(), byteBuffer.position(), byteBuffer.limit()); - Arrays.fill(byteBuffer.array(), (byte) 0x00); - return (bytes); - } } diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 4191e20..e9ce3e6 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -18,14 +18,14 @@ android:title="@string/action_wifi_settings" app:showAsAction="never" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4a22e2a..996cfa3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,6 +12,6 @@ 3 4 5 - Add - Delete + Up + Down -- 2.11.0