Gdi+绘制半透明文字并保存为透明背景图片
2018-01-09 14:40
866 查看
透明、半透明原理:看画刷的颜色,Color的第一个参数指定透明值,范围0-255,0全透明,255不透明
1.新建MFC工程,名为newtou
2.添加头文件
//Gdi+初始化
//Gdi+卸载
3.在newtouDlg.cpp中添加函数
用法:
CLSID encoderClsid
GetEncoderClsid(L"image/jpeg", &m_jpgClsid);
GetEncoderClsid(L"image/png", &encoderClsid);
GetEncoderClsid(L"image/bmp", &encoderClsid);
GetEncoderClsid(L"image/gif", &encoderClsid);
GetEncoderClsid(L"image/tiff", &encoderClsid);
4.在OnBnClickedOk()中添加实现
1.新建MFC工程,名为newtou
2.添加头文件
#include <GdiPlus.h> using namespace Gdiplus; #pragma comment(lib, "Gdiplus")
//Gdi+初始化
GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
//Gdi+卸载
Gdiplus::GdiplusShutdown(m_gdiplusToken); // GDI+卸载
3.在newtouDlg.cpp中添加函数
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { UINT num = 0; // number of image encoders UINT size = 0; // size of the image encoder array in bytes ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size); if(size == 0) return -1; // Failure pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); if(pImageCodecInfo == NULL) return -1; // Failure GetImageEncoders(num, size, pImageCodecInfo); for(UINT j = 0; j < num; ++j) { if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) { *pClsid = pImageCodecInfo[j].Clsid; free(pImageCodecInfo); return j; // Success } } free(pImageCodecInfo); return -1; // Failure }
用法:
CLSID encoderClsid
GetEncoderClsid(L"image/jpeg", &m_jpgClsid);
GetEncoderClsid(L"image/png", &encoderClsid);
GetEncoderClsid(L"image/bmp", &encoderClsid);
GetEncoderClsid(L"image/gif", &encoderClsid);
GetEncoderClsid(L"image/tiff", &encoderClsid);
4.在OnBnClickedOk()中添加实现
void CnewtouDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
//CDialogEx::OnOK();
GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
//1:建立透明内存32位位图文件;
Bitmap bmp( 1600,104, PixelFormat32bppARGB );
//2:刷新32位位图文件为透明;
Graphics g( &bmp );
Color myColor(0, 0,0,0 );
g.Clear( myColor );
//非透明
/*Graphics g( &bmp );
Color myColor( 255,255,255 );
g.Clear( myColor );*/
//3:作图:
//g.DrawLine( &Pen(Color::Black), 0,0,100,100);
//文字开始 方法1
/*Gdiplus::FontFamily fontFamily(_T("宋体"));
FontStyle fontstyle = FontStyleBold;
Gdiplus::Font font(&fontFamily, 60, fontstyle, Gdiplus::Unit::UnitPoint);
Gdiplus::SolidBrush solidBrush(Color(128,255,201,14));
//Gdiplus::StringFormat stringformat;
//stringformat.SetTrimming(StringTrimming::StringTrimmingEllipsisWord);
//字体边沿平滑处理
g.SetTextRenderingHint(Gdiplus::TextRenderingHint::TextRenderingHintAntiAlias);
//【1】计算字符串的尺寸
Gdiplus::RectF boundingBox(0, 0, 0, 0);
CString str(_T("Administrator"));
g.MeasureString(str, -1, &font, Gdiplus::PointF(0, 0), &boundingBox);
//【2】创建bitMap
Gdiplus::SizeF size;
boundingBox.GetSize(&size);
//【3】绘制文本
g.DrawString(str, -1, &font, Gdiplus::PointF(0, 0), &solidBrush);
//文字结束
*/
//方法2
Gdiplus::FontFamily fontFamily(_T("宋体"));
FontStyle fontstyle = FontStyleBold;
Gdiplus::Font font(&fontFamily, 60, fontstyle, Gdiplus::Unit::UnitPoint);
Gdiplus::SolidBrush solidBrush(Color(128,255,201,14));
GraphicsPath txtPath(FillModeWinding);
StringFormat cStringFormat ;
cStringFormat.SetAlignment( StringAlignmentNear );//StringAlignmentNear 改为居左
cStringFormat.SetLineAlignment(StringAlignmentNear);
cStringFormat.SetFormatFlags( StringFormatFlagsNoWrap | StringFormatFlagsMeasureTrailingSpaces );
cStringFormat.SetTrimming(StringTrimmingEllipsisCharacter);
CString str(_T("Administrator"));
txtPath.AddString(str, -1 ,&fontFamily, fontstyle , 60 /**72/96*/ /* + borderWidthByPx*/ , RectF(0, 0, 1600/*cSize.cx*/ , 104 ),&cStringFormat);
Pen borderPen( Color(0,255,255,255), 2 *2 );
borderPen.SetLineJoin(LineJoinRound);
//g.DrawPath(&borderPen,&txtPath);
g.FillPath(&solidBrush,&txtPath);
//4: 显示:
Graphics gwnd(this->m_hWnd);
gwnd.DrawImage( &bmp, 0,0);
//5:保存为png图片:
CL
4000
SID pngClsid;
GetEncoderClsid(L"image/png", &pngClsid);
bmp.Save(L"F:\\Mosaic2.png", &pngClsid, NULL);
//CLSID pngClsid;
/*GetEncoderClsid(L"image/bmp", &pngClsid);
bmp.Save(L"F:\\Mosaic2.bmp", &pngClsid, NULL);
GetEncoderClsid(L"image/gif", &pngClsid);
bmp.Save(L"F:\\Mosaic2.gif", &pngClsid, NULL);
GetEncoderClsid(L"image/jpeg", &pngClsid);
bmp.Save(L"F:\\Mosaic2.jpeg", &pngClsid, NULL);*/
}
相关文章推荐
- GDI+(绘制图片背景文字)
- 【切片技巧】PS 切片时 保存成透明背景png格式图片
- vc++加载透明png图片方法——GDI+和CImage两种 ,vs2005 vs2008 PNG背景
- 图片与文字半透明效果 鼠标移上不透明
- 半透明背景,文字不透明,ie8和现代浏览器的兼容性
- [小技巧]兼容IE6的纯CSS背景半透明文字不透明
- C#绘制半透明窗体,只让窗体背景半透明,而窗体里面的控件不透明
- android 透明背景黑色字图片 保存得到本地 显示黑色图片
- 设置背景透明的窗体,GDI+绘制异形WINFORM
- 自绘实现半透明水晶按钮(继承CButton,设置BS_OWNERDRAW风格,覆盖DrawItem函数绘制按钮,把父窗口的背景复制到按钮上,实现视觉上的透明,最后通过AlphaBlend实现半透明)
- VC实现透明背景和半透明图片
- C++ GDI+ DrawString 保存字符串文字为透明图片
- 如何在CDC上绘制背景透明的图片
- CSS实现背景透明而背景上的文字图片不透明
- CSS半透明背景 文字不透明
- 背景色透明,里面内容(图片、文字)不透明
- windows GDI+ 离屏绘制文字图片
- GDI+ 将图片背景设为透明
- 使用css设置图片背景透明,文字不透明
- Android开发_如何设置按钮背景透明与半透明_图片背景透明