我正在创建一个64位位图并使用Graphics对象将其包装以绘制它。 问题是Gdiplus Color类只有32位(每个组件只有字节,即最大255),那么如何使用gdiplus绘制64位图像呢? e.g。
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
答案 0 :(得分:2)
似乎Gdiplus不支持任何64位操作。仍然能够使用Gdiplus方法的一种简单方法是将图像分成两个32位图像并单独操作。
您可以将ARGB频道拆分为AARR和GGBB,也可以使用两个具有较低和较高ARGB位的32位图像。
两种变体都需要您编写包装函数或将每个调用分成两部分,如下所示:
// 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)顺序,我不确定。根据{{3}},必须将其更改为Color(R,G,B,A)。如果你不需要alpha通道,你应该更喜欢highlow变种,因为你仍然可以使用Color(R,G,B)。
要显示或保存结果,您需要合并2个缓冲区。
答案 1 :(得分:1)
你无法根据MSDN - Image Pixel Format Constants:
<强>说明强>
PixelFormat48bppRGB
,PixelFormat64bppARGB
,和PixelFormat64bppPARGB
每个使用16位 颜色成分(通道)。微软 Windows GDI + 1.0版可以读取 每通道16位图像,但是这样 图像转换为 每通道8位格式 处理,显示和保存。
答案 2 :(得分:0)
您可以使用此Bitmap构造函数设置像素格式:
public:
Bitmap(
int width,
int height,
PixelFormat format
)
编辑:您将无法使用Color类(我认为),因为它只支持32位颜色。但是,您可以在位图上调用LockBits并手动循环。