Уменьшение размера изображение путем grayscale'а

120
15 октября 2019, 00:10

Всех приветствую.

Есть такой код:

public void onPreviewFrame(byte[] data,Camera camera){
    try{
        YuvImage yuvimage=new YuvImage(data,ImageFormat.NV21,this.width,this.height,null);
        System.out.println("WidthandHeight"+yuvimage.getHeight()+"::"+yuvimage.getWidth());
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        yuvimage.compressToJpeg(new Rect(0,0,this.width,this.height),100,baos);
    }catch(Exception e){
        Log.d("parse","errpr");
    }
}

Он берет изображение с камеры и превращает его в jpg изображение.

Но вот в чем проблема:

Изображение, даже если его качество ужать до 20-ти процентов - весит около 2-х кб (2000 байтов).

Как я понимаю, вес изображения состоит из:

ширина * длина * 3 (3 - три канала. R, G, B).

То есть, если сделать изображение черно-белым - эта формула превращается в нечто иное:

ширина * длина * 1

То есть, тем самым, уменьшая размер изображения в 3 раза!

Я попытался сделать такое.

Но после проверки - оказалось, что изображение-то стало черно-былым, но размер как был, так и остался около 2-х кб.

Код (из RGB в grayscale):

public Bitmap toGrayscale(Bitmap bmpOriginal)
{
    int width, height;
    height = bmpOriginal.getHeight();
    width = bmpOriginal.getWidth();
    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(bmpGrayscale);
    Paint paint = new Paint();
    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
    paint.setColorFilter(f);
    c.drawBitmap(bmpOriginal, 0, 0, paint);
    return bmpGrayscale;
}

Что могло пойти не так? Можно ли уменьшить вес изображения таким способом?

Answer 1

У Вас получилось что в каждом канале лежит одинаковое значение, каналов все равно 4 по 8 бит на канал, как вы указали при создании изображения Bitmap.Config.ARGB_8888, вы можете воспользоваться другим форматом изображения, однако я не подскажу какие типы и как устроены в андроид.

вот что говорит документация:

READ ALSO
В чём здесь ошибка? [закрыт]

В чём здесь ошибка? [закрыт]

Вот кодПри компиляции выдаёт ошибки:

123
Добавление iFrame на PrimeFace страницу

Добавление iFrame на PrimeFace страницу

Вот в чем вопрос: хочу вывести iFrame с обзором pdf, написал сервлет который отвечает за высылку информации (так как сам pdf находится не в папке...

127
Как сделать эффект чтобы было понятно ,что скриншот сделан

Как сделать эффект чтобы было понятно ,что скриншот сделан

У меня есть кнопка которая делает скриншотКак сделать какой-то эффект, чтобы было понятно ,что скриншот сделан

130
Почему дублируется диалог?

Почему дублируется диалог?

Почему дублируется диалог? Если запустить меню, выбрать доход, ввести доход, закрыть диалог, закрыть ввод дохода, в меню выбрать доход, ввести...

148