2012-04-18 57 views
-2

我正在製作一個程序來自動對圖像執行某些編輯。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) 

當我解鎖位圖3210
for(int i = 0; i < x - byte; i += 4) 

的第二一個引起了AccessViolationException。

如果可能,請儘可能簡化說明。我在這方面相當新穎。 謝謝你的時間。

+0

難道是'PixelFormat'不匹配在調用LockBits,打開32bppARGB圖像時? – Anlo 2012-04-18 11:46:05

+0

我在你的問題中增加了代碼格式,但第二套'for'循環作爲一個問題沒有意義,你可能需要澄清。 – 2012-04-18 12:33:35

+0

嗯,我嘗試使用bmp.PixelFormat以及PixelFormat.Format32bppArgb。既不產生圖像。 – user1341109 2012-04-19 04:25:37

回答

1

here是稍尖與實施例,如何與位圖容易地工作。

p.s.之間的區別:

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

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

取決於ý值。