喫茶XRAYトップページ

[スレッド全体
]

[2242] 印刷プレビュー制御コンポーネントで画像表示させる際のサイズ取得について!返信 削除
2009/3/16 (月) 19:54:22 KSCHomePage
KSCです。

印刷プレビュー制御コンポーネントに画像を表示させる際に
StretchDrawBitmapやStretchDrawPictのように描画範囲を指定して
縮小・拡大して表示するメソットがありますが、

これを使用する際に当然、描画範囲を指定するのですが、
指定した画像ファイルの大きさを指定したい場合、
どのようにすれば良いのでしょうか?

// ICO->BMP変換
procedure ICOToBMP(var BMP: TBitmap; fname: String);
var
  Ico :TIcon;
begin
  Ico :=TIcon.Create;
  BMP.PixelFormat := pf24bit;
  try
    BMP.Width  := GetSystemMetrics( SM_CXICON );
    BMP.Height := GetSystemMetrics( SM_CYICON );
    Ico.LoadFromFile( fname );
    DrawIconEx(BMP.Canvas.Handle, 0, 0, Ico.Handle, 0, 0, 0, 0, 3);
  finally
   Ico.Free;
  end;
end;

// JPG->BMP変換
procedure JpegToBmp(var BMP: TBitmap; fname: String);
var
  Jpeg: TJpegImage;
begin
  Jpeg := TJpegImage.Create;
  try
    Jpeg.LoadFromFile( fname );
    BMP.Assign( Jpeg );
  finally
    Jpeg.Free;
  end;
end;

procedure GetPrinterDPI(var x, y: Integer);
begin
  x := GetDeviceCaps( Canvas.Handle, LOGPIXELSX );
  y := GetDeviceCaps( Canvas.Handle, LOGPIXELSY );
end;

procedure ImageDisp(Sender: TObject; fname: string; var w, h: Integer);
var
  x, y: Integer;
  str: string;
  bmp: TBitmap;
begin
  w := 0;  h := 0;

  GetPrinterDPI(x, y);

  bmp :=TBitmap.Create;
  try
    str := UpperCase( ExtractFileExt( fname ) );

    if str = '.BMP' then
      bmp.LoadFromFile( fname )
    else
    if str = '.ICO' then
      ICOToBMP(bmp, fname)  // ICO->BMP変換
    else
    if str = '.JPG' then
      JpegToBmp(bmp, fname)  // JPG->BMP変換
    else
      bmp := nil;

    if Assigned( bmp ) then begin
      w := bmp.Width * 25.4 / x;
      h := bmp.Height * 25.4 / y;
    end;
  finally
    bmp.Free;
  end;
end;

のようなソースで、取得しようとしたのですが正確にサイズ取得できません。

ご指導願えないでしょうか?




[2243] Re:印刷プレビュー制御コンポーネントで画像表示させる際のサイズ取得について!返信 削除
2009/3/16 (月) 22:02:58 Mr.XRAY
▼ KSCさん

> のようなソースで、取得しようとしたのですが正確にサイズ取得できません。

コードはまだ十分見ていないのですが,
これ多分ダメだと思います.
というのは,画像を表示する際,メタファイルに埋め込むわけですが,
この時,元となるメタファイルが自分の基準に合わせているのでは
ないかと思います.
間違っていたらゴメンなさい.

でも,後で調べてみます.
おそらく,そうようなことを考えている方が他にもいるのではない
かと思いますので.
これも,先の回転ミラー文字と同様,何か情報がわかったら,サンプル
として追加候補ですね.

[2254] Re2:印刷プレビュー制御コンポーネントで画像表示させる際のサイズ取得について!返信 削除
2009/3/21 (土) 22:33:00 KSCHomePage
▼ Mr.XRAYさん
> ▼ KSCさん
>
> > のようなソースで、取得しようとしたのですが正確にサイズ取得できません。
>
> コードはまだ十分見ていないのですが,
> これ多分ダメだと思います.
> というのは,画像を表示する際,メタファイルに埋め込むわけですが,
> この時,元となるメタファイルが自分の基準に合わせているのでは
> ないかと思います.
> 間違っていたらゴメンなさい.


やはりダメですか〜。
 
> でも,後で調べてみます.
> おそらく,そうようなことを考えている方が他にもいるのではない
> かと思いますので.
> これも,先の回転ミラー文字と同様,何か情報がわかったら,サンプル
> として追加候補ですね.


宜しくお願い致します。

既存の帳票イメージをStretchDrawBitmapやStretchDrawPictを使って、
読み込み「背景」として使う事で、「はめ込み印刷」のような使い方が
出来ないかなと思ったのですが...困っている状態です。

「はめ込み印刷」のような使い方を動画化してみました。
http://kazuyoshisc.sakura.ne.jp/joomla/index.php?option=com_content&view=article&id=29:2009-03-21-12-55-35&catid=5:category-designer&Itemid=3



[2255] Re3:印刷プレビュー制御コンポーネントで画像表示させる際のサイズ取得について!返信 削除
2009/3/21 (土) 23:03:20 Mr.XRAY
▼ KSCさん

> 既存の帳票イメージをStretchDrawBitmapやStretchDrawPictを使って、
> 読み込み「背景」として使う事で、「はめ込み印刷」のような使い方が
> 出来ないかなと思ったのですが...困っている状態です。


これって,もしかして,ここの図3の,こういう感じのことですか?
ここで描画されているのは,郵便の払い込み(振込み?)用紙です.
この用紙の画像は,印刷もできましす,印刷しない様にもできます.

http://mrxray.on.coocan.jp/Delphi/plPrev/T_EnterMainForm.htm

あと,
http://mrxray.on.coocan.jp/Delphi/plTackPrev/T_NumSheet.htm
の図4の各シールでは,ウサギの絵を印刷するようになっています.

間違っていたらゴメンなさい.

[2257] Re4:印刷プレビュー制御コンポーネントで画像表示させる際のサイズ取得について!返信 削除
2009/3/22 (日) 23:34:58 KSCHomePage
▼ Mr.XRAYさん
> ▼ KSCさん
>
> > 既存の帳票イメージをStretchDrawBitmapやStretchDrawPictを使って、
> > 読み込み「背景」として使う事で、「はめ込み印刷」のような使い方が
> > 出来ないかなと思ったのですが...困っている状態です。
>
> これって,もしかして,ここの図3の,こういう感じのことですか?
> ここで描画されているのは,郵便の払い込み(振込み?)用紙です.
> この用紙の画像は,印刷もできましす,印刷しない様にもできます.
>
> http://mrxray.on.coocan.jp/Delphi/plPrev/T_EnterMainForm.htm
>
> あと,
> http://mrxray.on.coocan.jp/Delphi/plTackPrev/T_NumSheet.htm
> の図4の各シールでは,ウサギの絵を印刷するようになっています.
>
> 間違っていたらゴメンなさい.


間違っていません。
おっしゃる通りです。

サンプル「09_EnterFormRealTime」を私のソフトで再現してみました。

再現している最中に3点ほど機能の改善を行いました。
やっぱり自分でデータ作成する事で、分かる問題や改善がありますね!

やはり悩みは、
 1)指定の画像のサイズをミリで取得したい。
 もう1つ
 2)問題の無い画像(サンプルの「HaraikomiPaper.emf」等)もありますが
   画質が悪く描画されてしまう画像もある事。

[2259] Re5:印刷プレビュー制御コンポーネントで画像表示させる際のサイズ取得について!返信 削除
2009/3/23 (月) 05:58:02 Mr.XRAY
>  1)指定の画像のサイズをミリで取得したい。

これは前にも書きましたが,現在分かりません.
実は,メタファイルの構造がよく分かっていないので,もしかしたら
それらの情報が入っていて,取出せるのかも知れません.

>  2)問題の無い画像(サンプルの「HaraikomiPaper.emf」等)もありますが
>    画質が悪く描画されてしまう画像もある事。


う〜ん.
どうなんでしょう.「09_EnterFormRealTime」の用紙はワードで作成
したメタファイルですが,これは割りと画質はいいののでは.
もちろん,プレビューサイズが小さくなると,崩れてくるのは
どうしようもありません.

一方,スキャナで取り込んだのは,事実上,ビットマップですから,
拡大縮小には耐えないでしょうね,
サイズ(バイト数)を上げれば少しはよくなるとは思いますが,
表示が重たくなってしまいますね.

[2260] Re6:印刷プレビュー制御コンポーネントで画像表示させる際のサイズ取得について!返信 削除
2009/3/23 (月) 15:18:32 Mr.XRAY
> 一方,スキャナで取り込んだのは,事実上,ビットマップですから,
> 拡大縮小には耐えないでしょうね,


今もあるのかわかりませんが,帳票類の画像として市販されている
のを,以前購入したことがあります.これは明らかにスキャナーの
取り込み画像でした.
結局,自分で,ゴリゴリ書くことにしました.
コード内に書くことが多いのですが,最近は,PCの性能が高くなって
きているので,ワードでメタファイル作成で十分かも知れません.


[2261] Re7:印刷プレビュー制御コンポーネントで画像表示させる際のサイズ取得について!返信 削除
2009/3/24 (火) 18:32:31 KSCHomePage
▼ Mr.XRAYさん
> > 一方,スキャナで取り込んだのは,事実上,ビットマップですから,
> > 拡大縮小には耐えないでしょうね,
>
> 今もあるのかわかりませんが,帳票類の画像として市販されている
> のを,以前購入したことがあります.これは明らかにスキャナーの
> 取り込み画像でした.
> 結局,自分で,ゴリゴリ書くことにしました.
> コード内に書くことが多いのですが,最近は,PCの性能が高くなって
> きているので,ワードでメタファイル作成で十分かも知れません.


色々と有難うございます。

下記の内容について調べていこうと思っています。
・拡張子別の画像の解像度(DPI)の取得方法。
 JPGについては「About Delphi」の過去の記事よりソースを見つけ、
 テストしたところDPI取得できました。
・DHGLライブラリを使用した拡張子別の画像の読込と拡大・縮小。
 拡大・縮小した画像データを「StretchDrawPict」に渡してみようかと。

ちょっと頑張ってみます。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82