Попытка создать растровое изображение из изображения - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь создать приложение, которое делает снимок и получает от него данные. Я работал на основе этого урока , но попытался изменить его, чтобы изображение вместо растрового изображения превращалось в растровое изображение. Основная проблема заключается в том, что когда я пытаюсь отобразить это растровое изображение с помощью 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.
...