我正在研究我的大学项目,我试图更改位图的位值。
我将位图加载到内存流,然后将其解压缩到byte []数组。现在我改变了这个byte []数组的几个中心位,然后将它转换回位图图像。
但是我得到了“无效位图”的运行时异常 位图是否有一些特殊的格式而不是简单的位???
以下是我使用的代码:
MemoryStream mstream = new MemoryStream();
Bitmap b = new Bitmap(@"D:\my_pic.bmp");
b.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] ba = mstream.ToArray();
mstream.Close();
byte[] _Buffer = null;
System.IO.FileStream _FileStream = new System.IO.FileStream(_FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader _BinaryReader = new System.IO.BinaryReader(_FileStream);
long _TotalBytes = new System.IO.FileInfo(_FileName).Length;
_Buffer = _BinaryReader.ReadBytes((Int32)_TotalBytes);
// close file reader
_FileStream.Close();
_FileStream.Dispose();
_BinaryReader.Close();
int leng1 = ba.Length;
int leng2=_Buffer.Length;
for(i=(leng1)/2;i<leng1;i++)
{
for(j=0;j<leng2;j++)
{
ba[i]=_Buffer[j];
}
if(j==(leng2-1))
{
break;
}
}
TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
Bitmap bitmap1 = (Bitmap)tc.ConvertFrom(ba);
答案 0 :(得分:0)
你必须有自己的目标想要使用位图在这个低级别操作,这很好。除非您受到性能限制,否则在图形API级别上执行图形会更容易方式。即使你 对性能敏感,其他人也已经在丛林中开辟了道路。
回到问题。 BMP文件格式比其他文件格式更简单,但仍有许多种类。以下是BMP格式的详细介绍:
现在,如果您只是解析自己的BMP文件并且知道它们是32位RGB,并且标题将是如此大小,您可以跳过等等,那么这可能适用于您。如果你需要处理任何旧的BMP,它会变得非常快,这就是图书馆试图为你处理一切的原因。