山本ワールド
Windowsプログラミング
アルゴリズム Vitual C++ 2008/2013によるWin32/Win64 APIレベルのプログラム 基礎 Vitual C++ 2008/2013によるAPIレベルのプログラム(32/64bit) Wix3でインストーラーを作る Visual C++ 2008 Standard Editonによるフォームアプリケーションのプログラム(32/64bit) Vitual C++ 2008 Standard EditonによるAPIレベルのプログラム(32/64bit) Windows 7対応 Visual C++ 2008 ExpressによるAPIレベルのプログラム Visual C++ 2005 ExpressによるAPIレベルのプログラム Visual C++ Versiosn 5 BORLAND C++ Windowsプログラム全般 Excel VBA その他GDI+を使用しjpg画像ピクセルサイズにより縦長と横長画像を分類する
概要
GDI+を使うと簡単にjpgファイルが扱える。
お遊びとして、指定したフォルダーに含まれるjpgファイルの画像の大きさより縦長か、横長かを判定し、縦長ならそのフォルダのtateフォルダーへ、横長ならyokoフォルダーへ移動するプログラムを作成した。
GDI+を使用するためGDIPLUS.DLLが必要である。実行ファイル作成には、GDIPLUS.LIBが必要。
使い方(DOSプロンプトを開いてから)
jpgldirection [画像が入っているフォルダー名]
フォルダー名にたとえば d: のように指定するとd:\と解釈されますので注意指定ください。引数の数もチェックしていません。標準出力には変換されるファイル名とピクセルサイズが表示されます。UNICODE版は、標準出力へ出力する場合に、sjisに変換している点に注意してください。Unicodeのまま出力すると文字化けする。
ソース
// jpgファイルを縦長と横長に分離
// gdiplus.libをリンク gdiplus.dllが必要
#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
#include <direct.h>
#include <tchar.h>
using namespace Gdiplus;
GdiplusStartupInput gdiSI;
ULONG_PTR gdiToken;
void get_jpeg_size(TCHAR* szFile,int *x,int *y){
#ifndef UNICODE
WCHAR wTitle[256];
MultiByteToWideChar(932,0,szFile,-1,wTitle,sizeof(wTitle)/sizeof(TCHAR));
Image myImage(wTitle);
#else
Image myImage(szFile);
#endif
*x=myImage.GetWidth();
*y=myImage.GetHeight();
}
// 最初に呼び出される関数
void _tmain(int argc,TCHAR** argv){
GdiplusStartup(&gdiToken, &gdiSI, NULL);
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
TCHAR find_path[MAX_PATH];
TCHAR path[MAX_PATH];
TCHAR dtc[MAX_PATH];
_tcscpy_s(find_path,sizeof(find_path)/sizeof(TCHAR),argv[1]);
_tcscat_s(find_path,sizeof(find_path)/sizeof(TCHAR),TEXT("\\*.jpg"));
hFind = FindFirstFile(find_path, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) {
_tprintf(TEXT("ファイルがみつかりませんでした。\n"));
}else{
_stprintf_s(dtc,sizeof(dtc)/sizeof(TCHAR),TEXT("%s\\tate"),argv[1]);
_tmkdir(dtc);
_stprintf_s(dtc,sizeof(dtc)/sizeof(TCHAR),TEXT("%s\\yoko"),argv[1]);
_tmkdir(dtc);
do{
int x,y;
_tcscpy_s(path,sizeof(path)/sizeof(TCHAR),argv[1]);
_tcscat_s(path,sizeof(path)/sizeof(TCHAR),TEXT("\\"));
_tcscat_s(path,sizeof(path)/sizeof(TCHAR),FindFileData.cFileName);
get_jpeg_size(path,&x,&y);
if(x<y)
_stprintf_s(dtc,sizeof(dtc)/sizeof(TCHAR),TEXT("%s\\tate\\%s"),argv[1],FindFileData.cFileName);
else
_stprintf_s(dtc,sizeof(dtc)/sizeof(TCHAR),TEXT("%s\\yoko\\%s"),argv[1],FindFileData.cFileName);
MoveFile(path,dtc);
#ifdef UNICODE
char sjis[MAX_PATH*2];
WCHAR utf[MAX_PATH*2];
_stprintf_s(utf,L"%s %i*%i",FindFileData.cFileName,x,y);
WideCharToMultiByte(932,0,utf,-1,sjis,sizeof(sjis),NULL,NULL);
puts(sjis);
#else
printf_s("%s %i*%i\n",path /*FindFileData.cFileName*/ ,x,y);
#endif
}while((FindNextFile(hFind,&FindFileData)));
FindClose(hFind);
}
GdiplusShutdown(gdiToken);
}
Copyright (C) 2012 山本ワールド All Rights Reserved.