Gdiplus 64-битные цвета - PullRequest
       36

Gdiplus 64-битные цвета

3 голосов
/ 07 марта 2009

Я создаю 64-битное растровое изображение и оборачиваю его, используя объект Graphics для рисования поверх него. Проблема в том, что класс Gdiplus Color только 32-битный (каждый компонент только байтовый, т.е. 255), так как я могу нарисовать 64-битное изображение, используя gdiplus? например,

Bitmap bmp(100, 100, PixelFormat64bppARGB);

Graphics g(&bmp);
//how do I draw a red line now, if i use Color(255,0,0) it comes as almost dark black red

Ответы [ 3 ]

2 голосов
/ 07 марта 2009

Кажется, Gdiplus не поддерживает какие-либо 64-битные операции. Как-то более простой способ использовать методы Gdiplus - разделить изображение на два 32-битных изображения и работать с ними отдельно.

Вы можете разделить каналы ARGB на AARR и GGBB или использовать два 32-битных изображения с младшим и старшим битами ARGB.

Для обоих вариантов потребуется либо написать функции обтекания, либо разделить каждый вызов на две части, например:

// This is what you want to do (ARGB, 16 bit per channel)
// g.DrawLine(new Pen(Color(0, 65535, 1024, 31), 1, 0, 0, 100, 100);

// AARR GGBB variant
gAARR.DrawLine(new Pen(Color(0,0,255,255), 1, 0, 0, 100, 100);
gGGBB.DrawLine(new Pen(Color(4,0,0,31), 1, 0, 0, 100, 100);

// ARGBhigh ARGBlow variant
gHigh.DrawLine(new Pen(Color(0,255,4,0), 1, 0, 0, 100, 100);
gLow.DrawLine(new Pen(Color(0,255,0,31), 1, 0, 0, 100, 100);

Обратите внимание, что я использовал здесь порядок цветов (A, R, G, B), и я не уверен в этом. В соответствии с документацией MSDN это значение должно быть изменено на Цвет (R, G, B, A). Если вам не нужен альфа-канал, вы должны предпочесть вариант highlow, поскольку вы все равно сможете использовать Color (R, G, B) с ним.

Чтобы отобразить или сохранить результаты, вам нужно объединить 2 буфера.

1 голос
/ 30 января 2010

Вы не можете в соответствии с MSDN - константы формата пикселя изображения :

Примечания

PixelFormat48bppRGB, PixelFormat64bppARGB и PixelFormat64bppPARGB использовать 16 бит на цветовая составляющая (канал). Microsoft Windows GDI + версия 1.0 может читать 16-битные изображения на канал, но такие изображения преобразуются в Формат 8 бит на канал для обработка, отображение и сохранение.

0 голосов
/ 07 марта 2009

Вы можете использовать этот растровый конструктор для установки формата пикселей:

public:
Bitmap(
    int width, 
    int height, 
    PixelFormat format
)

РЕДАКТИРОВАТЬ: вы не сможете использовать класс Color (я думаю), поскольку он поддерживает только 32-битные цвета. Однако вы можете вызывать LockBits для Bitmap и проходить по нему вручную.

...