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;
のようなソースで、取得しようとしたのですが正確にサイズ取得できません。
ご指導願えないでしょうか?
|