【发布时间】:2011-10-14 11:30:09
【问题描述】:
努力处理 Bitmap 对象的底层字节以消除图像的透明度。 我有一个静态删除透明度方法,它需要一个 Bitmap 对象,相关代码:http://pastebin.com/ZjjPSdx8
现在,当我使用基于文件的位图对象调用它时,位图不会发生突变。如果我理解正确,这是因为它基于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()
标签: c# bitmap png transparency gif