从像素数据的字节数组创建位图

从像素数据的字节数组创建位图,第1张

从像素数据的字节数组创建位图
  1. 如果封送处理数据而不是设置scan0(直接或通过BitMap()的重载)进行设置,这是安全的。您不想让托管对象固定,这将限制垃圾收集器。
  2. 如果您进行复制,绝对安全。
  3. 输入数组是托管的,可以由GC进行移动,scan0是非托管指针,如果移动数组,该指针将过期。Bitmap对象本身是受管理的,但通过句柄在Windows中设置scan0指针。
  4. ImageLockMode.UserInputBuffer是吗?显然,它可以传递给LockBits,也许它告诉Bitmap()复制输入数组数据。

从数组创建灰度位图的示例代码:

    var b = new Bitmap(Width, Height, PixelFormat.Format8bppIndexed);    ColorPalette ncp = b.Palette;    for (int i = 0; i < 256; i++)        ncp.Entries[i] = Color.FromArgb(255, i, i, i);    b.Palette = ncp;    var BoundsRect = new Rectangle(0, 0, Width, Height);    BitmapData bmpData = b.LockBits(BoundsRect,   ImageLockMode.WriteOnly,   b.PixelFormat);    IntPtr ptr = bmpData.Scan0;    int bytes = bmpData.Stride*b.Height;    var rgbValues = new byte[bytes];    // fill in rgbValues, e.g. with a for loop over an input array    Marshal.Copy(rgbValues, 0, ptr, bytes);    b.UnlockBits(bmpData);    return b;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5567271.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存