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

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

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

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

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

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

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

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

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).

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

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

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

Для справки

Intereting Posts
Почему браузер эмулятора Android просто выходит на главный экран при вводе URL-адреса и нажмите клавишу ввода? SSL взаимная аутентификация FAIL на Android Client принимает сертификат серверов, но сервер не получает сертификат клиента Как увидеть предупреждения Gradle на Android Studio? Установите (и обновите) приложение для Android с моего собственного сайта, а не на рынок Использование python и matplotlib для android Android: передать JSONобъект между фрагментами Каков размер размера стека потока пользовательского интерфейса Android и как его преодолеть? Как поставить список в намерении Папки формата макета Android-студии Как проверить системную версию Android? Как отправить заказываемую трансляцию в PendingIntent? Popupwindow с изображением Как отключить отображение «предложений» на Soft Keyboard В чем смысл использования декораций предметов в RecyclerView VS, редактирующих отдельные раздутые макеты? Шрифт Hindi с уровнем API 15 (или Android 4.0.2)