在操纵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()' –