使用c#更改位图

时间:2011-05-14 04:56:43

标签: c# wpf image bitmap

我正在研究我的大学项目,我试图更改位图的位值。

我将位图加载到内存流,然后将其解压缩到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);

1 个答案:

答案 0 :(得分:0)

你必须有自己的目标想要使用位图在这个低级别操作,这很好。除非您受到性能限制,否则在图形API级别上执行图形会更容易方式。即使你 对性能敏感,其他人也已经在丛林中开辟了道路。

回到问题。 BMP文件格式比其他文件格式更简单,但仍有许多种类。以下是BMP格式的详细介绍:

现在,如果您只是解析自己的BMP文件并且知道它们是32位RGB,并且标题将是如此大小,您可以跳过等等,那么这可能适用于您。如果你需要处理任何旧的BMP,它会变得非常快,这就是图书馆试图为你处理一切的原因。