c#.NET - 使用lockbits提取原始像素数据

时间:2012-04-18 11:04:42

标签: c# .net lockbits

我正在制作一个自动对图像进行某些编辑的程序。

其中一项功能是将“白色”像素转换为“白色”和透明。最初,一切都很顺利。

我设法将24bppRGB图像转换为32bppRGB图像,所需像素全部透明。

图片在图片框中加载,一旦保存就可以打开。

当我尝试重新编辑文件时出现问题。当我试图再次提取原始像素数据时,我什么也没得到。据我所知,整个像素数据数组是0。

为什么会这样?

^这是我的主要问题。 除了这个问题之外,我还注意到程序有一些怪癖,这些只是出于好奇:

有什么区别:

for(int i = 0; i < (x + 1); i += y)

for(int i = 0; i <= (x); i += y)

还有:

byte = 4;
for(int i = 0; i < x - byte; i += byte)

for(int i = 0; i < x - byte; i += 4)

当我解锁位图时,第二个引起了AccessViolationException。

如果可能,请尽可能简化说明。我是一个相当新的人。 谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

here是一个小小的提示示例,如何轻松使用位图。

P.S。区别:

for(int i = 0; i < (x + 1); i += y)

for(int i = 0; i <= (x); i += y)

取决于 y 值。