请教TOLEGraphic读取图形的尺寸问题。 |
尚未結案
|
pcsoftdiy
一般會員 ![]() ![]() 發表:8 回覆:14 積分:4 註冊:2005-03-30 發送簡訊給我 |
我的一个程式用TOLEGraphic来读取gif、jpg文件,不知为何他的尺寸与windows资源管理器读出的尺寸不同。
程式码如下:
var
ole1: TOleGraphic;
fs: TFileStream;
begin
if not FileExists(afile) then Exit; PreviewImage.Visible := false;
try
ole1 := TOleGraphic.Create;
fs := TFileStream.Create(afile, fmOpenReadWrite);
try
ole1.LoadFromStream(fs);
PreviewImage .Picture .Assign (ole1)
except end;
finally
ole1.Free;
fs.Free;
end;
PreviewImage.Visible := True;
end; 显示出来比windows显示要小一些,不知何故?
|
wameng
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
原因不求甚解?我懶.....
主要是轉換單位誤差所產生的問題。
大概跟SetWindowExtEx、SetViewPortExtEx....有點相關吧! OK. 快睡著了!.....
有一個簡單的作法:
Type TMyOleGraphic = Class(TOleGraphic) protected function GetHeight: Integer; override; function GetWidth: Integer; override; end; function TMyOleGraphic.GetHeight: Integer; begin Result := Round(((MMHeight * 0.001)/2.54)* 96); end; function TMyOleGraphic.GetWidth: Integer; begin Result := Round(((MMWidth * 0.001)/2.54)* 96); end;用 TMyOleGraphic取代 TOleGraphic 就這樣吧!大概跟DC 解析等等相關吧。... |
pcsoftdiy
一般會員 ![]() ![]() 發表:8 回覆:14 積分:4 註冊:2005-03-30 發送簡訊給我 |
|
pcsoftdiy
一般會員 ![]() ![]() 發表:8 回覆:14 積分:4 註冊:2005-03-30 發送簡訊給我 |
找到api了 function TMyOleGraphic.GetHeight: Integer;
begin
Result := Round(((MMHeight * 0.001)/2.54)* GetDeviceCaps(getdc(GetDesktopWindow ),LOGPIXELSX)));
end; function TMyOleGraphic.GetWidth: Integer;
begin
Result := Round(((MMWidth * 0.001)/2.54)* GetDeviceCaps(getdc(GetDesktopWindow ),LOGPIXELSY)));
end; 不过TOLEGraphic似乎不支持gif动画
|
wameng
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
wameng
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
pcsoftdiy
一般會員 ![]() ![]() 發表:8 回覆:14 積分:4 註冊:2005-03-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |