Преобразуйте битовый массив в GrayScale в Android

Я плохо знаком с этим сайтом, и я иду с вопросом о Android.

Там какой-либо путь состоит в том, чтобы преобразовать Битовый массив в шкалу полутонов? Я знаю, как потянуть полутоновый битовый массив (использование операций холста: http://www.mail-archive.com/android-developers@googlegroups.com/msg38890.html), но мне действительно нужен фактический битовый массив в серых цветах (или по крайней мере что-то, что могло быть преобразовано в битовый массив позже). Я должен реализовать его вручную (попиксельные операции)?

Я искал много и все еще не мог найти. Кто-либо знает легкий/эффективный способ сделать это?

Большое спасибо!

55
задан leparlon 30 July 2010 в 17:17
поделиться

2 ответа

Разве это не то, что делает код, на который вы ссылаетесь? Он берет цветное растровое изображение («bmp»), создает дубликат растрового изображения («bm»), а затем рисует цветное растровое изображение в «bm», используя фильтр, чтобы преобразовать его в оттенки серого. С этого момента вы можете использовать «bm» как фактическое растровое изображение в градациях серого и делать с ним все, что захотите.

Вам нужно будет немного подправить сэмпл (он использует жестко запрограммированные размеры, вы можете просто клонировать размер исходного растрового изображения), но в остальном он кажется готовым к использованию как получится, в зависимости от того, что вы хотите.

14
ответ дан 26 November 2019 в 17:37
поделиться

О, да, это так. Я использовал это неправильно, спасибо, что указали мне на это. (Извините за бесполезный вопрос) Вот конечный код (в значительной степени основанный на том, который связан с ним), поскольку он может кому-то помочь:

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;
}

Любые замечания или комментарии к нему очень приветствуются.

Спасибо

148
ответ дан 26 November 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: