在操縱Bitmap對象的基礎字節以消除圖像的透明度方面苦苦掙扎。 我有一個靜態移除透明度的方法,採用一個位圖對象,培訓相關代碼:http://pastebin.com/ZjjPSdx8C#中的位圖字節操作
現在,當我把這種基於文件的位圖對象,該位不被突變。如果我理解正確的話,這是因爲它是基於一個文件按http://support.microsoft.com/kb/814675
所以創建了一個方法來複制位圖: http://pastebin.com/9rXRJ6cx
private Bitmap LoadBmp(string name)
{
Assembly asm = Assembly.GetExecutingAssembly();
string loc = Path.GetDirectoryName(asm.Location);
string path = Path.Combine(loc, "Images\\" + name);
Bitmap notsafe = (Bitmap)Bitmap.FromFile(path);
return ImageProcessor.SafeBitmap(notsafe);
...
所有罰款和花花公子。適用於PNG,但不適用於GIF。他們出來了可怕的 扭曲。
嘗試的另一種方法的文件寫入到一個字節數組,然後基礎上,該位圖:
byte[] b = new byte[2048];
int c;
byte[] imgArr;
using (FileStream fs = new FileStream(path, FileMode.Open))
{
using (MemoryStream ms = new MemoryStream())
{
while ((c = fs.Read(b, 0, b.Length)) > 0)
ms.Write(b, 0, c);
imgArr = ms.ToArray();
}
}
return (Bitmap)Bitmap.FromStream(new MemoryStream(imgArr));
這不會扭曲GIF的。但是我的刪除透明度方法不再適用於PNG! 顯然我做錯了什麼,希望有人可以幫忙!
與你的問題沒有直接關係,但是如果'File'對象有一個美妙的'ReadAllBytes()'方法''System.IO.File.ReadAllBytes()' –