在C#中,我可以聲明新的48bitRGB
或64bitRGBA
沒有問題,實際上正確的格式保存在磁盤上。64位圖像顏色聲明(每通道16位)
但是,當涉及到聲明顏色時,我無法聲明多於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位的顏色成分的方法?
你可以訪問原始像素,在這裏看到如何:http://stackoverflow.com/questions/7768711/setpixel-is-too-slow-is-there-a-faster-way-to-draw-to-位圖 – thumbmunkeys
System.Drawing.Color在內部使用一個long(有符號的64位整數)來表示它的RGBA值,但它的所有操作都接受ints,您需要創建自己的Bitmap類或使用等效的圖形格式庫。 – Machinarius
你使用wpf嗎? – thumbmunkeys