Подтвердить что ты не робот

Объявление цвета 64-битного изображения (16 бит на канал)

В С# я могу объявить новые 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

Что такое метод объявления 16-битного цветового компонента в С#?

4b9b3361

Ответ 1

Проблема связана с тем, что класс Bitmap инкапсулирует бимодальный код GDI +.

GDI + версии 1.0 и 1.1 могут читать 16-битные изображения на канал, но такие изображения преобразуются в формат 8 бит на канал для обработки, отображения и сохранения. ссылка

Итак, когда вы устанавливаете значение пикселей, которое вы имеете в 8-битном формате на канал.

Если использование использует небезопасный код, вы можете напрямую получить доступ к значениям, см. Получить цвет изображения 64bpp.