Растровое изображение в byteArray, пиксельная логика (как ускорить алгоритм) - PullRequest
0 голосов
/ 30 декабря 2018

В моем приложении я снимаю изображения, и при нажатии кнопки просто применяю фильтр (функцию).Решено:

Итак, проблема в том, что когда я преобразую растровое изображение в 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);
    }
...