Преобразование растрового изображения в GrayScale в Android

Я новичок на этом сайте, и у меня есть вопрос об Android.

Есть ли способ конвертировать bitmap в оттенки серого? Я знаю, как рисовать bitmap в gradleациях серого (с использованием операций canvasа: http://www.mail-archive.com/[email protected]/msg38890.html ), но мне действительно нужно фактическое bitmap в сером цвете (или на что-то, что позже можно было бы преобразовать в bitmap). Должен ли я реализовать его вручную (по пиксельным операциям)?

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

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

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

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

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

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

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

благодаря

Я хотел бы упомянуть, что при таком подходе необходимо учитывать один важный аспект. BitMap на Android хранятся в NativeHeap. Просто создавая растровые изображения, вы в конечном итоге OutOfMemoryException память, получив OutOfMemoryException (OOM).

Поэтому bitmap всегда должно быть .recycled() .

Если вы собираетесь показать это bitmap в ImageView . Затем вместо преобразования Bitmap в Gray Scale вы можете попробовать под кодом:

 ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(0); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); imageview.setColorFilter(filter); 

Для справки

  • Как сохранить bitmap на внутреннем хранилище
  • Странная проблема с памятью при загрузке изображения в объект Bitmap
  • как заполнить цвет изображения в определенной области?
  • Давайте будем гением компьютера.