【问题标题】:Initialize Gdiplus bitmap with color用颜色初始化 Gdiplus 位图
【发布时间】:2018-01-10 18:24:38
【问题描述】:

我打算在位图 pBmp 中绘制。那部分工作正常。我想用(背景)颜色初始化这个位图。 这是我完成它的解决方法:

#include <windows.h>
#include <Gdiplus.h>

#define BITMAPX 1000
#define BITMAPY 600

Gdiplus::Bitmap *pBmp;
Gdiplus::Graphics *pGraph;

void init()
{
    pBmp = new Gdiplus::Bitmap(BITMAPX, BITMAPY, PixelFormat24bppRGB);  // Uninitialized bitmap
    pGraph = Gdiplus::Graphics::FromImage(pBmp);                            // Uninitialized graphics object
    pGraph->Clear(Color::Snow);                                 // Set background color and use as a template 
    delete pBmp;                                                // Free for reuse
    pBmp = new Gdiplus::Bitmap(BITMAPX, BITMAPY, pGraph);               // Create bitmap with background color
}

Palette 之类的东西肯定有更好的方法,但是在谷歌搜索了一段时间后,我找不到一个简洁的例子来实现它。 有人买单线吗?

【问题讨论】:

标签: bitmap gdi+


【解决方案1】:

PixelFormat24bppRGB 是没有 Alpha 通道的 24 位位图。将PixelFormat32bppARGB 用于带有 Alpha 通道的 32 位位图。

Gdiplus::Bitmap bmp(100, 100, Gdiplus::PixelFormat32bppARGB);

用透明背景填充:

Gdiplus::Graphics *mem = Gdiplus::Graphics::FromImage(&bmp);
Gdiplus::SolidBrush brush_tr(Gdiplus::Color::Transparent);
mem->FillRectangle(&brush_tr, 0,0,100,100);

如果打印在HDC 设备上下文上,这应该显示为空白

Gdiplus::Graphics g(hdc);
g.DrawImage(&bmp, 0, 0);

【讨论】:

  • 正是我想要的!我没有首先尝试这个的原因是我的误解,即 FromImage() 创建了一个副本,而实际上它创建了一个指向同一图像内存的指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多