Title

2017年7月の投稿一覧

いろんなサイズのテスト画像をたくさん作るには

アプリのUIなんか作っていると、要所要所でPNG画像が必要になるのですが、ひとまずテスト画像で進めたいことはよくありますよね。
まったくないと試せないので。

少量ならPhotoshopとかで適当に作れば良いのですが、量が多いと面倒です。
コマンドラインでサイズ指定したら画像ができるみたいなことはやれば出来ると思うんですが、とっさにいつも無いので作りました。

同じもの作るの3回目くらいなんですが、いつもどこかいってしまってファイル名すら思い出せないので今回はここに貼っておきます。

createTestImage.zip(WIN32)

引数にファイル名 横サイズ 縦サイズ を入れるとランダムな色の背景の画像にファイル名が入った画像ファイルが生成されます。
ファイル名にスペースとか入れられないですので、諦めるかソースコード修正してください。

>createTestImage.exe createTestImage.png 200 100

↓こういう画像ができます。

ソースコード

#include <Windows.h>
#include <gdiplus.h>
#include <string>
#include <time.h>  
#include <stdio.h>
#include <tchar.h>

#pragma comment(lib,"Gdiplus.lib")

using namespace Gdiplus;

#include <cstdlib>
using namespace std;
ULONG_PTR           gdiToken;
GdiplusStartupInput gdiSI;

int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
	UINT  num = 0;
	UINT  size = 0;
	Gdiplus::ImageCodecInfo* pImageCodecInfo = NULL;
	Gdiplus::GetImageEncodersSize(&num, &size);
	if (size == 0) return -1;

	pImageCodecInfo = (Gdiplus::ImageCodecInfo*)(malloc(size));
	if (pImageCodecInfo == NULL) return -1;
	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;
		}
	}

	free(pImageCodecInfo);
	return -1;
}

void createImage(WCHAR *filename,int width,int height)
{
	Bitmap *outputImage = new Bitmap(width, height, PixelFormat32bppARGB);

	Gdiplus::Graphics graphics(outputImage);
	graphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias);

	Pen pen(Color(255, 0, 0, 0), 2);
	int r = (int)((double)rand() / (RAND_MAX + 1) * (128) + 127);
	int g = (int)((double)rand() / (RAND_MAX + 1) * (128) + 127);
	int b = (int)((double)rand() / (RAND_MAX + 1) * (128) + 127);

	graphics.Clear(Color(255, r, g, b));
	graphics.DrawRectangle(&pen, 0, 0, width-1, height-1);

	TCHAR sizeText[100];
	wsprintf(sizeText, L"%dx%d", width, height);

	Font fontMain(L"Arial", 14);
	Font fontSize(L"Arial", 9);
	StringFormat format;
	format.SetAlignment(StringAlignmentCenter);
	Gdiplus::SolidBrush blackBrush(Color(255, 0, 0, 0));

	graphics.DrawString(filename, -1, &fontMain, RectF(0.0f, 3.0f, width - 1.0f, height - 1.0f), &format, &blackBrush);
	graphics.DrawString(sizeText, -1, &fontSize, RectF(0.0f, 28.0f, width - 1.0f, height - 1.0f), &format, &blackBrush);


	CLSID id;
	GetEncoderClsid(L"image/png", &id);
	outputImage->Save(filename, &id);

	delete outputImage;

}
int _tmain(int argc, _TCHAR* argv[])
{
	if (argc <= 3)
	{
		printf("createTestImage Size Filename\n\n");

		printf("for example:\n\ncreateTestImage.exe testimage.png 128 256\n\n\n");
		return 0;
	}


	srand((unsigned)time(NULL));
	GdiplusStartup(&gdiToken, &gdiSI, NULL);

	createImage(argv[1], _wtoi(argv[2]), _wtoi(argv[3]));

	Gdiplus::GdiplusShutdown(gdiToken);
	return 0;
}

ご覧頂けるとおり、エラー処理入ってません!

カレンダー

2017年7月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

▲Pagetop