2

我开发了截取其他应用程序的应用程序。

当我使用 android 设备开发它时,下面的代码可以工作。

         mImageReader = ImageReader.newInstance(mWidth, mHeight, PixelFormat.RGBA_8888, 5);

但该代码在 android app player for pc(momo app player)中不起作用,因为 PixelFormat.RGBA_8888 不适合 momo app player。

所以我将 PixelFormat.RGBA_8888 更改为 PixelFormat.RGBX_8888

尽管代码可以正常工作,但下面的代码不起作用,因为 pixelformat 已更改。

          Image img = null;
                        try {
                            int format = reader.getImageFormat();
                            Log.v(TAG, "format" + format);
                            img = reader.acquireLatestImage();

                            if (img != null) {
                                Image.Plane[] planes = img.getPlanes();
                                if (planes[0].getBuffer() == null) {
                                    return;
                                }
                                int width = img.getWidth();
                                int height = img.getHeight();
                                int pixelStride = planes[0].getPixelStride();
                                int rowStride = planes[0].getRowStride();
                                int rowPadding = rowStride - pixelStride * width;
                                byte[] newData = new byte[width * height * 4];

                                int offset = 0;
                                bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
                                //bitmap = Bitmap.createBitmap(bitmap1, mCheckWidthMin, mCheckHeightMin, mGapWidth, mGapHeight);

                                ByteBuffer buffer = planes[0].getBuffer();
                                for (int i = 0; i < width; ++i) {
                                    for (int j = 0; j < height; ++j) {
                                        int pixel = 0;

                                        pixel |= (buffer.get(offset) & 0xff) << 16;     // R
                                        pixel |= (buffer.get(offset + 1) & 0xff) << 8;  // G
                                        pixel |= (buffer.get(offset + 2) & 0xff);       // B
                                        pixel |= (buffer.get(offset + 3) & 0xff) << 24; // A
                                        bitmap.setPixel(j, i, pixel);
                                        offset += pixelStride;

                                        //else  Log.v(TAG, "Attacking");
                                        //if ( i <= mCheckWidthMax && i >= mCheckWidthMin && j  >= mCheckHeightMin && j <= mCheckHeightMax) {
                                        if ( i <= 171 && i >= 164 && j  >= 236 && j <= 241) {
                                            if(!isAttacked){
                                                checkAttack(pixel, i, j);
                                            }
                                        }
                                        //if ( i == 169 && j == 240) checkAttack(pixel, i, j);

                                    }
                                    offset += rowPadding;
                                }

我认为让它工作的简单方法是将图像格式从 RGBX 更改为 RGBA。

有没有办法改变像素格式?

或者如何从 PixelFormat.RGBX_8888 获取 RGB 值?

请帮助并节省我的时间。

谢谢你!

4

0 回答 0