Я пытаюсь создать приложение, которое делает снимок и получает от него данные. Я работал на основе этого урока , но попытался изменить его, чтобы изображение вместо растрового изображения превращалось в растровое изображение. Основная проблема заключается в том, что когда я пытаюсь отобразить это растровое изображение с помощью imageView, происходит сбой приложения, из-за чего я полагаю, что оно не преобразуется должным образом в растровое изображение.
Я попытался использовать намерение вместо этого, но мне нужно делать снимки в приложении, потому что при съемке на экране должно быть наложение сетки. Намерение просто открыть приложение камеры.
ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader imageReader) {
Image image = null;
try{
image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
save(bytes);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally {
{
if(image != null)
image.close();
}
}
}
private void save(byte[] bytes) throws IOException {
Bitmap bitmap = Bitmap.createBitmap(515, 515, Bitmap.Config.ARGB_8888);
//bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(bytes));
bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
switch (imageCount) {
case 0:
picture1 = bitmap;
previousImage.setImageBitmap(picture1);
imageCount++;
break;
case 1:
picture2 = bitmap;
previousImage.setImageBitmap(picture2);
imageCount++;
break;
case 2:
picture3 = bitmap;
previousImage.setImageBitmap(picture3);
imageCount++;
break;
case 3:
picture4 = bitmap;
previousImage.setImageBitmap(picture4);
imageCount++;
break;
case 4:
picture5 = bitmap;
previousImage.setImageBitmap(picture5);
imageCount++;
break;
case 5:
picture6 = bitmap;
previousImage.setImageBitmap(picture6);
imageCount++;
break;
case 6:
System.out.println("Cannot take anymore pictures");
default:
System.out.println("Something went wrong ¯ ∖_( ツ )_/ ¯");
}
}
};
вот журнал аварий:
E/AndroidRuntime: FATAL EXCEPTION: camera Background
Process: com.example.colmet, PID: 13608
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:8182)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1271)
at android.view.View.requestLayout(View.java:20105)
at android.view.View.requestLayout(View.java:20105)
at android.view.View.requestLayout(View.java:20105)
at android.view.View.requestLayout(View.java:20105)
at android.view.View.requestLayout(View.java:20105)
at android.view.View.requestLayout(View.java:20105)
at android.support.constraint.ConstraintLayout.requestLayout(ConstraintLayout.java:3172)
at android.view.View.requestLayout(View.java:20105)
at android.widget.ImageView.setImageDrawable(ImageView.java:491)
at android.support.v7.widget.AppCompatImageView.setImageDrawable(AppCompatImageView.java:100)
at android.widget.ImageView.setImageBitmap(ImageView.java:621)
at android.support.v7.widget.AppCompatImageView.setImageBitmap(AppCompatImageView.java:108)
at com.example.colmetAndroid.MainActivity$6.save(MainActivity.java:358)
at com.example.colmetAndroid.MainActivity$6.onImageAvailable(MainActivity.java:333)
at android.media.ImageReader$ListenerHandler.handleMessage(ImageReader.java:648)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.os.HandlerThread.run(HandlerThread.java:61)
I/Process: Sending signal. PID: 13608 SIG: 9
Application terminated.