掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
画像のdpi値の求め方 (ID:44822)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
HIROさん 私もGIFはどーなの?と思ってました。手元のIrfanViewでDPI変更しても実際には変わりません。 えびさん 少し勘違いされてるような…DirectDraw.pasのコンパイルエラー? デモをコンパイルしたのでしょうか。 DirectDrawは使わないです。というか、何のために同梱されてるのか知りません。 GDIPlusで検索するとたくさんサンプルが見つかると思いますが、そこで必要なのは基本的に GDIPOBJ.pas、 GDIPAPI.pas、GDIPUTIL.pas の3つだけです。 それと、TGPGraphicsは不要ですね。下記のコードではTGPImageでなくTGPBitmapにしてみました。 解像度情報がない場合の対策としては、GetFlags()を利用すると良いのかなー、と。 GetHorizontalResolution のように、関数名で検索するとMSDNなどでたくさんヒットします。 そこで関連情報を仕入れると良いです。GDI+に関してはMSDNの情報がほぼそのまま使えますしね。 implementation {$R *.dfm} uses GDIPOBJ, GDIPAPI; // GetFlags()で使うImageFlags定数(ImageFlagsHasRealDPI ほか) procedure TForm1.Button1Click(Sender: TObject); const mHasRealDPI: array[Boolean] of String =('ウソです!', '本当です。'); var GPBmp: TGPBitmap; ResoH, ResoV: Single; Flags: UINT; begin if OpenDialog1.Execute then begin GPBmp:=TGPBitmap.Create(OpenDialog1.FileName); try ResoH:=GPBmp.GetHorizontalResolution(); ResoV:=GPBmp.GetVerticalResolution(); Flags:=GPBmp.GetFlags(); finally GPBmp.Free; end; Memo1.Lines.Add(''); Memo1.Lines.Add(OpenDialog1.FileName); Memo1.Lines.Add(Format('%g x %g DPI (%s)', [ResoH, ResoV, mHasRealDPI[(Flags and ImageFlagsHasRealDPI)<>0]])); end; end; ついでに。私が思いついた、いくつかの方法。 ・ GDI+ の GetHorizontalResolution()/GetVerticalResolution() ・ OS(というかExplorerのファイルのプロパティ)の機能を使う ・ ImageMagickのidentify -format(ImageMagickObject COM+ もある) ・ 誰かが作った画像処理用DLL?を使わせてもらう ・ 自分で頑張って画像ファイルのバイナリから取得してみる(泥沼に注意)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.