在C#中,我可以毫无问题地声明新48bitRGB
或64bitRGBA
,实际上正确的格式会保存在磁盘上。
但是,当声明颜色时,我无法声明超过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位颜色分量的方法是什么?
答案 0 :(得分:3)
问题源于Bitmap类封装了GDI + bimap。
GDI +版本1.0和1.1可以读取每通道16位的图像,但是这样的图像被转换为每通道8位格式以进行处理,显示和保存。 link
因此,当您设置像素值时,您将处理每通道8位格式。
如果使用不安全的代码,您可以直接访问这些值,请参阅Get 64bpp image color。