代码之家  ›  专栏  ›  技术社区  ›  Eric J.

以.NET格式设置单个像素16bppgrayscale图像

  •  8
  • Eric J.  · 技术社区  · 14 年前

    我正在尝试用.NET在内存中渲染一个需要16位灰度的小位图。位图的格式设置为PixelFormat.Format16bppGrayScale. 然而,Bitmap.SetPixel 接受颜色参数。颜色依次为R、B和G(以及可选的A)中的每一个取一个字节。

    1 回复  |  直到 14 年前
        1
  •  10
  •   kbrimington    14 年前

    不管图像格式如何, SetPixel()

    使用LockBits方法可以更快地设置像素,它允许您将托管数据快速封送到非托管位图字节。

    下面是一个可能的例子:

    Bitmap bitmap = // ...
    
    // Lock the unmanaged bits for efficient writing.
    var data = bitmap.LockBits(
        new Rectangle(0, 0, bitmap.Width, bitmap.Height),
        ImageLockMode.ReadWrite,
        bitmap.PixelFormat);
    
    // Bulk copy pixel data from a byte array:
    Marshal.Copy(byteArray, 0, data.Scan0, byteArray.Length);
    
    // Or, for one pixel at a time:
    Marshal.WriteInt16(data.Scan0, offsetInBytes, shortValue);
    
    // When finished, unlock the unmanaged bits
    bitmap.UnlockBits(data);
    

    http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/10252c05-c4b6-49dc-b2a3-4c1396e2c3ab