我开发了截取其他应用程序的应用程序。
当我使用 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 值?
请帮助并节省我的时间。
谢谢你!