彩色图像转换为黑白图像时需要计算图像中每像素有效的亮度值,通过匹配像素
亮度值可以轻松转换为黑白图像。
计算像素有效的亮度值可以使用下面的公式:
Y=0.3RED+0.59GREEN+0.11Blue
然后使用 Color.FromArgb(Y,Y,Y) 来把计算后的值转换
转换代码可以使用下面的方法来实现:
C#
1
public Bitmap ConvertToGrayscale(Bitmap source)
2![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
3![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
4![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
5
Bitmap bm = new Bitmap(source.Width,source.Height);
6![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
7
for(int y=0;y<bm.Height;y++)
8![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
9![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
10![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
11
for(int x=0;x<bm.Width;x++)
12![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
13![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
14![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
15
Color c=source.GetPixel(x,y);
16![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
17
int luma = (int)(c.R*0.3 + c.G*0.59+ c.B*0.11);
18![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
19
bm.SetPixel(x,y,Color.FromArgb(luma,luma,luma));
20![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
21
}
22![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
23
}
24![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
25
return bm;
26![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
27
}
VB
1![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
Public Function ConvertToGrayscale()Function ConvertToGrayscale()Function ConvertToGrayscale()Function ConvertToGrayscale(ByVal source As Bitmap) as Bitmap
2![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
3
Dim bm as new Bitmap(source.Width,source.Height)
4![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
5
Dim x
6![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
7
Dim y
8![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
9
For y=0 To bm.Height
10![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
11
For x=0 To bm.Width
12![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
13
Dim c as Color = source.GetPixel(x,y)
14![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
15
Dim luma as Integer = CInt(c.R*0.3 + c.G*0.59 + c.B*0.11)
16![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
17
bm.SetPixel(x,y,Color.FromArgb(luma,luma,luma)
18![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
19
Next
20![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
21
Next
22![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
23
Return bm
24![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
25
End Function
posted on 2008-10-20 13:10
幽幽 阅读(992)
评论(0) 编辑 收藏 引用 所属分类:
杂集