使用GDI+批量生成png图片,每个图片上绘制一个日期字串。
初始读取sample.png为模板:
#include <Windows.h> #include <time.h> #include <GdiPlus.h> using namespace Gdiplus; #pragma comment(lib,"gdiplus.lib") 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 } int main() { GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; // Initialize GDI+. GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); int pic_width = 1920; int pic_height = 1080; Image sample(TEXT("sample.png")); int smp_height = sample.GetHeight(); int smp_width = sample.GetWidth(); FontFamily fontFamily(L"Corbel"); Font font(&fontFamily, 112, FontStyleBold, UnitPoint); RectF rectF(.0f, .0f, sample.GetWidth(),sample.GetHeight()); SolidBrush solidBrush(Color(200, 0, 0, 0)); WCHAR buffer[40]; int y = 2012, m = 2, d = 26, t = 0; Graphics g(&sample); g.SetTextRenderingHint(TextRenderingHint::TextRenderingHintAntiAlias); CLSID pngClsid; GetEncoderClsid(L"image/png", &pngClsid); Color TransColor(0, 0, 0, 211); while(t<360) { wsprintf(buffer,TEXT("%4d-%02d-%02d"),y,m,d); g.DrawString(buffer, -1, &font, rectF, NULL, &solidBrush); wcscat(buffer,TEXT(".png")); sample.Save(buffer,&pngClsid); g.Clear(TransColor); d++; t++; if (d==32) { d=1; m++; if (m==13) { y++; m=1; } } } }