添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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图片:
	CLSID 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);*/
                    透明、半透明原理:看画刷的颜色,Color的第一个参数指定透明值,范围0-255,0全透明,255不透明1.新建MFC工程,名为newtou2.添加头文件#include using namespace Gdiplus;#pragma comment(lib, "Gdiplus")//Gdi+初始化GdiplusStartupInput gdip
下面的DrawTransparentBmp函数是一个完整的正确显示透明位图的函数,其各参数说明如下: 
HDC   hdc:目标HDC,即将要绘制位图的HDC 
HBITMAP   hbmp:位图的句柄,此位图可以是2位、4位、8位、16位、24位位图。 
RECT   &rect:将要绘制的区域 
COLORREF   colorTrans:透明
    前段时间做了一个图片透明画的代码,基本思路是使用ColorMatrix设置位图的Alpha通道,使其透明化。这类代码可能高手都懒得写,像我等菜鸟要用时就得费一番周则研究了,所以我把做完的代码发上来,大家有需要用的就拿去用,如果高兴的话还可以评论里说声加油之类的话,呵呵。     利用ColorMatrix还可以调整整个位图的RGB值,看各位需要发挥了。     代码如下:  1/**...
最近有绘制半透明矩形做遮罩需求,因此在网上找了两种实现 Gdiplus实现: void GdipFillAlphaRect(CDC& pDC, CRect& rc, int r, int g, int b, int a) Gdiplus::Graphics renderer(pDC.GetSafeHdc()); Gdiplus::Color color(a, r, g, b); Gdiplus::Rect rectangle(0, 0, rc.Width(), rc.Height
2 //而且,这三个属性 在关键时刻还有可能 帮倒忙 3 //关键是:这三个属性,鸟用都没有 —— 不能消除锯齿 4 g.SmoothingMode = SmoothingMode.HighQuality; 5 g.InterpolationMode ... 此功能通过纯GDI实现,而通过GDI实现透明背景的窗口的关键点是产生一张32位的HBITMAP,而后UpdateLayeredWindow(ULW_ALPHA)。 仅此提供一个愿景和实现案例。
在 C 语言中,你可以使用 Windows 图像处理库(Windows GDI)来保存 BMP 图片。你需要使用到两个重要的函数:CreateBitmap 和 SaveBitmap。 CreateBitmap 函数用来创建一个位图对象,你需要指定宽度、高度和色彩深度。 SaveBitmap 函数用来保存位图到一个文件中,你需要指定文件名和位图对象。 下面是一个简单的例子,展示了如何使用这两个函数来保存一个 BMP 图片: #include <windows.h> int main() // 创建一个 200x200 像素的位图,色彩深度为 24 HBITMAP hBitmap = CreateBitmap(200, 200, 24); // 保存位图到文件 "image.bmp" SaveBitmap(hBitmap, "image.bmp"); return 0; 请注意,这个例子仅仅是一个示例,实际的图像处理工作可能要更加复杂。你可能需要使用其他的函数来设置图像像素的值,比如 SetPixel 或者 BitBlt。