Кажется, что 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 documentation, это должно быть заменено на Color (R, G, B, A). Если вам не нужен альфа-канал, вы должны предпочесть вариант с высоким разрешением, поскольку вы все равно сможете использовать с ним цвет (R, G, B).
Для отображения или сохранения результатов, вам необходимо слить 2 буфера.
IIUC, 64bpp подразумевает ширину 16 бит для каждого компонента. Однако класс Color поддерживает только 8 бит на компонент. Один из способов - извлечь пиксель и установить его самостоятельно, если это возможно. Никогда не работал с GDI, поэтому не мог больше помочь :( – dirkgently
да, это похоже только на вариант, чтобы рисовать и копировать буфер изображения, масштабируя до 16 бит, но этого я и хочу избежать. –
Не используйте класс цвета, измените буфер непосредственно. –