last article described how to convert bitmap from color to black and white using the simple formula bw = (r + g +)/3. some experts suggested that it should be 0.3r + 0.59g + 0.11b ~ refer grayscale - wikipedia, the free encyclopedia.



copy your test picture to /res/drawable folder, name it testpicture.jpg.



Mã nguồn PHP:
[color=#000000]
package com[/color][color=#007700].[/color][color=#0000bb]androidbitmapprocessing[/color][color=#007700]; [/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]app[/color][color=#007700].[/color][color=#0000bb]activity[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]graphics[/color][color=#007700].[/color][color=#0000bb]bitmap[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]graphics[/color][color=#007700].[/color][color=#0000bb]bitmapfactory[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]graphics[/color][color=#007700].[/color][color=#0000bb]color[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]os[/color][color=#007700].[/color][color=#0000bb]bundle[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]widget[/color][color=#007700].[/color][color=#0000bb]imageview[/color][color=#007700]; public class [/color][color=#0000bb]androidbitmapprocessingactivity [/color][color=#007700]extends [/color][color=#0000bb]activity [/color][color=#007700]{ [/color][color=#0000bb]imageview imageview_source[/color][color=#007700], [/color][color=#0000bb]imageview_gray[/color][color=#007700], [/color][color=#0000bb]imageview_bw[/color][color=#007700]; [/color][color=#0000bb]bitmap bitmap_source[/color][color=#007700], [/color][color=#0000bb]bitmap_dest[/color][color=#007700]; [/color][color=#ff8000]/** called when the activity is first created. */ [/color][color=#007700]@[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void oncreate[/color][color=#007700]([/color][color=#0000bb]bundle savedinstancestate[/color][color=#007700]) { [/color][color=#0000bb]super[/color][color=#007700].[/color][color=#0000bb]oncreate[/color][color=#007700]([/color][color=#0000bb]savedinstancestate[/color][color=#007700]); [/color][color=#0000bb]setcontentview[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]layout[/color][color=#007700].[/color][color=#0000bb]main[/color][color=#007700]); [/color][color=#0000bb]imageview_source [/color][color=#007700]= ([/color][color=#0000bb]imageview[/color][color=#007700])[/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]source[/color][color=#007700]); [/color][color=#0000bb]imageview_gray [/color][color=#007700]= ([/color][color=#0000bb]imageview[/color][color=#007700])[/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]imagegray[/color][color=#007700]); [/color][color=#0000bb]imageview_bw [/color][color=#007700]= ([/color][color=#0000bb]imageview[/color][color=#007700])[/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]imagebw[/color][color=#007700]); [/color][color=#0000bb]bitmap_source [/color][color=#007700]= [/color][color=#0000bb]bitmapfactory[/color][color=#007700].[/color][color=#0000bb]decoderesource[/color][color=#007700]([/color][color=#0000bb]getresources[/color][color=#007700](), [/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]drawable[/color][color=#007700].[/color][color=#0000bb]testpicture[/color][color=#007700]); [/color][color=#0000bb]imageview_gray[/color][color=#007700].[/color][color=#0000bb]setimagebitmap[/color][color=#007700]([/color][color=#0000bb]processingbitmap_gray[/color][color=#007700]([/color][color=#0000bb]bitmap_source[/color][color=#007700])); [/color][color=#0000bb]imageview_bw[/color][color=#007700].[/color][color=#0000bb]setimagebitmap[/color][color=#007700]([/color][color=#0000bb]processingbitmap_bw[/color][color=#007700]([/color][color=#0000bb]bitmap_source[/color][color=#007700])); } private [/color][color=#0000bb]bitmap processingbitmap_gray[/color][color=#007700]([/color][color=#0000bb]bitmap src[/color][color=#007700]){ [/color][color=#0000bb]bitmap dest [/color][color=#007700]= [/color][color=#0000bb]bitmap[/color][color=#007700].[/color][color=#0000bb]createbitmap[/color][color=#007700]( [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getwidth[/color][color=#007700](), [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getheight[/color][color=#007700](), [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getconfig[/color][color=#007700]()); for([/color][color=#0000bb]int x [/color][color=#007700]= [/color][color=#0000bb]0[/color][color=#007700]; [/color][color=#0000bb]x [/color][color=#007700]< [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getwidth[/color][color=#007700](); [/color][color=#0000bb]x[/color][color=#007700]++){ for([/color][color=#0000bb]int y [/color][color=#007700]= [/color][color=#0000bb]0[/color][color=#007700]; [/color][color=#0000bb]y [/color][color=#007700]< [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getheight[/color][color=#007700](); [/color][color=#0000bb]y[/color][color=#007700]++){ [/color][color=#0000bb]int pixelcolor [/color][color=#007700]= [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getpixel[/color][color=#007700]([/color][color=#0000bb]x[/color][color=#007700], [/color][color=#0000bb]y[/color][color=#007700]); [/color][color=#0000bb]int pixelalpha [/color][color=#007700]= [/color][color=#0000bb]color[/color][color=#007700].[/color][color=#0000bb]alpha[/color][color=#007700]([/color][color=#0000bb]pixelcolor[/color][color=#007700]); [/color][color=#0000bb]float pixelred [/color][color=#007700]= (float)[/color][color=#0000bb]color[/color][color=#007700].[/color][color=#0000bb]red[/color][color=#007700]([/color][color=#0000bb]pixelcolor[/color][color=#007700]) * [/color][color=#0000bb]0.3f[/color][color=#007700]; [/color][color=#0000bb]float pixelgreen [/color][color=#007700]= (float)[/color][color=#0000bb]color[/color][color=#007700].[/color][color=#0000bb]green[/color][color=#007700]([/color][color=#0000bb]pixelcolor[/color][color=#007700]) * [/color][color=#0000bb]0.59f[/color][color=#007700]; [/color][color=#0000bb]float pixelblue [/color][color=#007700]= (float)[/color][color=#0000bb]color[/color][color=#007700].[/color][color=#0000bb]blue[/color][color=#007700]([/color][color=#0000bb]pixelcolor[/color][color=#007700]) * [/color][color=#0000bb]0.11f[/color][color=#007700]; [/color][color=#0000bb]int pixelbw [/color][color=#007700]= (int)([/color][color=#0000bb]pixelred [/color][color=#007700]+ [/color][color=#0000bb]pixelgreen [/color][color=#007700]+ [/color][color=#0000bb]pixelblue[/color][color=#007700]); [/color][color=#0000bb]int newpixel [/color][color=#007700]= [/color][color=#0000bb]color[/color][color=#007700].[/color][color=#0000bb]argb[/color][color=#007700]( [/color][color=#0000bb]pixelalpha[/color][color=#007700], [/color][color=#0000bb]pixelbw[/color][color=#007700], [/color][color=#0000bb]pixelbw[/color][color=#007700], [/color][color=#0000bb]pixelbw[/color][color=#007700]); [/color][color=#0000bb]dest[/color][color=#007700].[/color][color=#0000bb]setpixel[/color][color=#007700]([/color][color=#0000bb]x[/color][color=#007700], [/color][color=#0000bb]y[/color][color=#007700], [/color][color=#0000bb]newpixel[/color][color=#007700]); } } return [/color][color=#0000bb]dest[/color][color=#007700]; } private [/color][color=#0000bb]bitmap processingbitmap_bw[/color][color=#007700]([/color][color=#0000bb]bitmap src[/color][color=#007700]){ [/color][color=#0000bb]bitmap dest [/color][color=#007700]= [/color][color=#0000bb]bitmap[/color][color=#007700].[/color][color=#0000bb]createbitmap[/color][color=#007700]( [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getwidth[/color][color=#007700](), [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getheight[/color][color=#007700](), [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getconfig[/color][color=#007700]()); for([/color][color=#0000bb]int x [/color][color=#007700]= [/color][color=#0000bb]0[/color][color=#007700]; [/color][color=#0000bb]x [/color][color=#007700]< [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getwidth[/color][color=#007700](); [/color][color=#0000bb]x[/color][color=#007700]++){ for([/color][color=#0000bb]int y [/color][color=#007700]= [/color][color=#0000bb]0[/color][color=#007700]; [/color][color=#0000bb]y [/color][color=#007700]< [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getheight[/color][color=#007700](); [/color][color=#0000bb]y[/color][color=#007700]++){ [/color][color=#0000bb]int pixelcolor [/color][color=#007700]= [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getpixel[/color][color=#007700]([/color][color=#0000bb]x[/color][color=#007700], [/color][color=#0000bb]y[/color][color=#007700]); [/color][color=#0000bb]int pixelalpha [/color][color=#007700]= [/color][color=#0000bb]color[/color][color=#007700].[/color][color=#0000bb]alpha[/color][color=#007700]([/color][color=#0000bb]pixelcolor[/color][color=#007700]); [/color][color=#0000bb]int pixelred [/color][color=#007700]= [/color][color=#0000bb]color[/color][color=#007700].[/color][color=#0000bb]red[/color][color=#007700]([/color][color=#0000bb]pixelcolor[/color][color=#007700]); [/color][color=#0000bb]int pixelgreen [/color][color=#007700]= [/color][color=#0000bb]color[/color][color=#007700].[/color][color=#0000bb]green[/color][color=#007700]([/color][color=#0000bb]pixelcolor[/color][color=#007700]); [/color][color=#0000bb]int pixelblue [/color][color=#007700]= [/color][color=#0000bb]color[/color][color=#007700].[/color][color=#0000bb]blue[/color][color=#007700]([/color][color=#0000bb]pixelcolor[/color][color=#007700]); [/color][color=#0000bb]int pixelbw [/color][color=#007700]= ([/color][color=#0000bb]pixelred [/color][color=#007700]+ [/color][color=#0000bb]pixelgreen [/color][color=#007700]+ [/color][color=#0000bb]pixelblue[/color][color=#007700])/[/color][color=#0000bb]3[/color][color=#007700]; [/color][color=#0000bb]int newpixel [/color][color=#007700]= [/color][color=#0000bb]color[/color][color=#007700].[/color][color=#0000bb]argb[/color][color=#007700]( [/color][color=#0000bb]pixelalpha[/color][color=#007700], [/color][color=#0000bb]pixelbw[/color][color=#007700], [/color][color=#0000bb]pixelbw[/color][color=#007700], [/color][color=#0000bb]pixelbw[/color][color=#007700]); [/color][color=#0000bb]dest[/color][color=#007700].[/color][color=#0000bb]setpixel[/color][color=#007700]([/color][color=#0000bb]x[/color][color=#007700], [/color][color=#0000bb]y[/color][color=#007700], [/color][color=#0000bb]newpixel[/color][color=#007700]); } } return [/color][color=#0000bb]dest[/color][color=#007700]; }}[/color] 
main.xml



Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]<?[/color][color=#0000bb]xml version[/color][color=#007700]=[/color][color=#dd0000]"1.0" [/color][color=#0000bb]encoding[/color][color=#007700]=[/color][color=#dd0000]"utf-8"[/color][color=#0000bb]?>[/color]<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <scrollview android:layout_width="fill_parent" android:layout_height="fill_parent"> <linearlayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="original" /> <imageview android:id="@+id/source" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/testpicture"/> <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="gray: 0.3r + 0.59g + 0.11b" /> <imageview android:id="@+id/imagegray" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="b and w: (r + g + b)/3" /> <imageview android:id="@+id/imagebw" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </linearlayout> </scrollview></linearlayout>
the code listed here convert color bitmap to gray scale by calculation. it's another approach using colormatrixcolorfilter; refer to next article: convert bitmap from color to grayscale using colormatrixcolorfilter