100分 再求问一个有关问题。 关于PNG透明部分 绘制大号文本错误的有关问题。 用gdi+ 和gdi都一样。有知道的 追加分,
100分 再求问一个问题。 关于PNG透明部分 绘制大号文本异常的问题。 用gdi+ 和gdi都一样。有知道的 追加分,!!!!!!
1.描述:
我想做一个png图片,创建一个背景透明的gdi+对象,再调用drawstring或者 drawtext将文字绘制上,然后保存成图片,但是遇到了问题。
2.效果图:
3.code:
------解决方案--------------------
你改改 255,255,255 看 a=0 时 是 没用的;Color myColor(0,255,255,255);
------解决方案--------------------
改了改:
不知道行不行
------解决方案--------------------
那就是 除了文字 其他 pixel 的 alpha =0 。(也就是 rgb 也可以 =0)
,可以把 背景色 搞成 红的 , 存盘 时 把 红色 点 的 alpha 都置 0
------解决方案--------------------
下面程序产生 透明的:
void CPngbarView::Test(CDC *pDC)
{
#if 1
Image* pImage = new Bitmap(W, H, PixelFormat32bppARGB);
Graphics g(pImage);
//
Color myColor(0,255,255,255);
g.Clear( myColor );
// 输出文字
Rect rcText(0,0,W,H);
WCHAR sText[] = L"测试测试测试";
FontFamily fontFamily(L"宋体");
Font font(&fontFamily, 22, FontStyleRegular, UnitPoint);
PointF pointF(10.0f, 10.0f);// 左上
SolidBrush solidBrush(Color(255, 0, 0, 255));// 不透明 蓝
g.DrawString(sText,6, &font, pointF, 0, &solidBrush);
// Save to file
CLSID pngClsid;
GetEncoderClsid(L"image/png", &pngClsid);
pImage->Save(L"Mosaic.png", &pngClsid, NULL);
1.描述:
我想做一个png图片,创建一个背景透明的gdi+对象,再调用drawstring或者 drawtext将文字绘制上,然后保存成图片,但是遇到了问题。
2.效果图:
3.code:
CPaintDC _dc(m_hWnd);
RECT rcClient;
GetClientRect(&rcClient);
CMemoryDC _memdc(_dc,rcClient);
_memdc.FillSolidRect(&rcClient,RGB(255,255,255));
std::wstring sText = _T("测试测试测试");
LOGFONT gLogFont;
SystemParametersInfo(SPI_GETICONTITLELOGFONT,sizeof(LOGFONT),&gLogFont,0);
gLogFont.lfHeight = -22;
HFONT hFont = CreateFontIndirect(&gLogFont);
//HFONT hOld = _memdc.SelectFont(hFont);
////DeleteObject(hFont);
//DrawText(_memdc.m_hDC,sText.c_str(),sText.length(),&rcClient,DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
//1:建立透明内存32位位图文件;
Image* pImage =new Bitmap( 200,50, PixelFormat32bppARGB );
Gdiplus::Graphics g(pImage);
Color myColor(0,255,255,255);
g.Clear( myColor );
HDC hDc = g.GetHDC();
SelectFont(hDc,hFont);
//如果这里的alpha设置为255 就完全没有问题,
//去掉这句就好了
SetBkMode(hDc,TRANSPARENT);
::SetTextColor(hDc,RGB(0,162,232));
RECT rcText = {0,0,200,50};
DrawText(hDc,sText.c_str(),sText.length(),&rcText,DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
g.ReleaseHDC(hDc);
Gdiplus::Graphics gp(_memdc);
gp.DrawImage(pImage,50,50,200,50);
mfc wtl 界面 png
------解决方案--------------------
你改改 255,255,255 看 a=0 时 是 没用的;Color myColor(0,255,255,255);
------解决方案--------------------
改了改:
#define W 200
#define H 50
void CPngbarView::Test(CDC *pDC)
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap bm,*Old;
bm.CreateCompatibleBitmap(pDC,W,H);
Old=memDC.SelectObject(&bm);
Rect rcText(0,0,W,H);
memDC.FillSolidRect((CRect*)&rcText,RGB(255,255,255));// 白色 底
//
Graphics g(memDC);
//
SolidBrush br(Color(128, 255, 0, 0));// 红色 半透明
g.FillRectangle(&br,rcText);
// 输出文字
WCHAR sText[] = L"测试测试测试";
FontFamily fontFamily(L"宋体");
Font font(&fontFamily, 22, FontStyleRegular, UnitPoint);
PointF pointF(10.0f, 10.0f);// 左上
SolidBrush solidBrush(Color(255, 0, 0, 255));// 不透明 蓝
g.DrawString(sText,6, &font, pointF, 0, &solidBrush);
// 输出到屏幕
pDC->BitBlt(0,0,W,H,&memDC,0,0,SRCCOPY);
//
memDC.SelectObject(Old);
DeleteObject(bm);
DeleteObject(memDC);
}
不知道行不行
------解决方案--------------------
那就是 除了文字 其他 pixel 的 alpha =0 。(也就是 rgb 也可以 =0)
,可以把 背景色 搞成 红的 , 存盘 时 把 红色 点 的 alpha 都置 0
------解决方案--------------------
下面程序产生 透明的:
void CPngbarView::Test(CDC *pDC)
{
#if 1
Image* pImage = new Bitmap(W, H, PixelFormat32bppARGB);
Graphics g(pImage);
//
Color myColor(0,255,255,255);
g.Clear( myColor );
// 输出文字
Rect rcText(0,0,W,H);
WCHAR sText[] = L"测试测试测试";
FontFamily fontFamily(L"宋体");
Font font(&fontFamily, 22, FontStyleRegular, UnitPoint);
PointF pointF(10.0f, 10.0f);// 左上
SolidBrush solidBrush(Color(255, 0, 0, 255));// 不透明 蓝
g.DrawString(sText,6, &font, pointF, 0, &solidBrush);
// Save to file
CLSID pngClsid;
GetEncoderClsid(L"image/png", &pngClsid);
pImage->Save(L"Mosaic.png", &pngClsid, NULL);