Преобразовать класс изображения из RGBX_8888 в RGBA_8888 или получить значение rgb из RGBX_8888
Я разрабатываю приложение, которое делает снимок экрана других приложений.
когда я разрабатываю его с помощью устройства Android, код ниже работает.
mImageReader = ImageReader.newInstance(mWidth, mHeight, PixelFormat.RGBA_8888, 5);
но код не работает в плеере приложений для Android для ПК (проигрыватель приложений momo), потому что PixelFormat.RGBA_8888 не подходит для проигрывателя приложений momo.
поэтому я изменил PixelFormat.RGBA_8888 на PixelFormat.RGBX_8888
Несмотря на то, что код работает правильно, приведенный ниже код не работает, потому что формат пикселя изменен.
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.
есть ли способ изменить пиксельный формат?
или как я могу получить значение RGB из PixelFormat.RGBX_8888?
Пожалуйста, помогите и сэкономьте мое время.
благодарю вас!