今天做了下修改,效率大概提高了1000倍吧
测试图如下:
214452542是上个方法的执行时间
250169是本次方法执行时间
图如本次方法生成图效果
更改了公式为:Y=0.299*R+0.114*G+0.587B
代码:
1
/**/
/// <summary>
2
/// 快速的将彩色图像变成黑白图像-目前仅适用于jpg格式的图像
3
/// </summary>
4
/// <param name="filePath">彩色图像地址</param>
5
/// <returns>返回的黑白图像</returns>
6
public
static
Bitmap QuickWhiteAndBlack(
string
filePath)
7![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
8![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
// 从文件创建Bitmap对象
10
Bitmap bmp = new Bitmap(filePath);
11![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
// 将Bitmap锁定到系统内存中
13
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
14
// 获得BitmapData
15
System.Drawing.Imaging.BitmapData bmpData =
16
bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
17
bmp.PixelFormat);
18![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
// 位图中第一个像素数据的地址。它也可以看成是位图中的第一个扫描行
20
IntPtr ptr = bmpData.Scan0;
21![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
// 将Bitmap对象的信息存放到byte数组中
23
// 假设位图中一个像素包含3byte,也就是24bit
24
int bytes = bmp.Width * bmp.Height * 3;
25
byte[] rgbValues = new byte[bytes];
26![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
//复制GRB信息到byte数组
28
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
29![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
// 根据Y=0.299*R+0.114*G+0.587B,Y为亮度
31
for (int counter = 0; counter < rgbValues.Length; counter += 3)
32![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
33
byte value = (byte)(rgbValues[counter] * 0.299 + rgbValues[counter + 2] * 0.114 + rgbValues[counter + 1] * 0.587);
34
rgbValues[counter] = value;
35
rgbValues[counter + 1] = value;
36
rgbValues[counter + 2] = value;
37
}
38![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
//将更改过的byte[]拷贝到原位图
40
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
41![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
// 解锁位图
43
bmp.UnlockBits(bmpData);
44
return bmp;
45![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
}
上篇地址:
http://www.cnblogs.com/jillzhang/archive/2006/10/09/524571.html
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
2
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
3
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![ExpandedBlockEnd.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
6
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
8
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![ContractedSubBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![dot.gif](https://www.cnblogs.com/Images/dot.gif)
33
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
![ExpandedSubBlockEnd.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
38
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![ExpandedBlockEnd.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
特别感谢: YaoTong
ahnan
沐枫
三位兄弟在上篇文章对我的帮助!