В моем приложении я снимаю изображения, и при нажатии кнопки просто применяю фильтр (функцию).Решено:
Итак, проблема в том, что когда я преобразую растровое изображение в byteArray, я получу байтовый формат RGBA, поэтому доступ к КРАСНОМУ - это каждая первая позиция 4-го байта.Это просто, но я не понимаю, почему черный равен 0, а не -128, а белый - -1, а не 127 // 4 байта: RGBA // 4 байта: 0 1 2 3 // byte => от -128 до 127 //черный -> серый -> серый -> белый // 0 -> 127 -> -128 -> -1
ТАК какие идеи, как получить число от 0 до 255 или от -128 до 127?соответствует переходу от черного к белому.
БЫЛО РЕШЕНО, добавив значение = значение & 0xFF
this.actualPosition = 1; //Green
for(int j=0; j < bmpHeight ; j++) {
for(int i=0 ; i < bmpBytesPerPixel/4 ;i++) {
byte midColor = (byte) ( (byteArray[actualPosition-1]& 0xFF) * 0.30 + (byteArray[actualPosition]& 0xFF) * 0.59 + (byteArray[actualPosition+1]& 0xFF) * 0.11 );
byteArray[actualPosition]=midColor;
byteArray[actualPosition+1]=midColor;
byteArray[actualPosition+-1]=midColor;
//byteArray[actualPosition+1]=byteArray[actualPosition];
//byteArray[actualPosition+-1]=byteArray[actualPosition];
actualPosition += 4;
}
}
Попытка создать самый быстрый алгоритм.При работе с HD-изображением / растровым изображением это время составляет около 2,7 с, поэтому длина байта составляет 4 *1080* 720 = 3 110 400 байт.Доступ к 3/4.
- вот как я конвертирую растровое изображение в byteArray и наоборот.
private void getArrayFromBitmap() {
// Převod Bitmap -> biteArray
int size = this.bmpBytesPerPixel * this.bmpHeight;
ByteBuffer byteBuffer = ByteBuffer.allocate(size);
this.bmp.copyPixelsToBuffer(byteBuffer);
this.byteArray = byteBuffer.array();
}
private void getBitmapFromArray() {
// Převod biteArray -> bitmap
Bitmap.Config configBmp = Bitmap.Config.valueOf(this.bmp.getConfig().name());
this.bmp = Bitmap.createBitmap(this.bmpWidth, this.bmpHeight, configBmp);
ByteBuffer buffer = ByteBuffer.wrap(this.byteArray);
this.bmp.copyPixelsFromBuffer(buffer);
System.out.println("\n DONE "+ configBmp);
}