64位图像颜色声明(每通道16位)

时间:2015-05-22 09:40:20

标签: c# image colors

在C#中,我可以毫无问题地声明新48bitRGB64bitRGBA,实际上正确的格式会保存在磁盘上。

但是,当声明颜色时,我无法声明超过8位值的颜色。这似乎是因为Color声明期望每个组件不超过8位。

到目前为止我的代码:

int x;
int y;
int w = 512, h = 512;

Bitmap image = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format48bppRgb); //New image with 16bit per channel, no problem

// Double 'for' control structure to go pixel by pixel on the whole image
for (y = 0; y < h; y++)
{
    for (x = 0; x < w; x++)
    {
        comp = somevalue; //Numeric component value
        // Lo que vaya por aqui
        System.Drawing.Color newColor = System.Drawing.Color.FromArgb(255, comp, comp, comp); // <= Here is the problem, values can't exceed 256 levels
        image.SetPixel(x, y, newColor);
    }
}

image.Save(@"C:\test.png", System.Drawing.Imaging.ImageFormat.Png); //Saving image to disk

在C#中声明16位颜色分量的方法是什么?

1 个答案:

答案 0 :(得分:3)

问题源于Bitmap类封装了GDI + bimap。

  

GDI +版本1.0和1.1可以读取每通道16位的图像,但是这样的图像被转换为​​每通道8位格式以进行处理,显示和保存。 link

因此,当您设置像素值时,您将处理每通道8位格式。

如果使用不安全的代码,您可以直接访问这些值,请参阅Get 64bpp image color