掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Metafileの部分拡大について (ID:34068)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Mr.XRAYです.解決済みというこですが,ついでに. >メタファイルは拡大してもメモリは使わないのですね。 描画情報が格納されているだけですから,基本的にそうなります. メタファイルをTImageに描画する際,DrawやStretchDrawの場合,TImgaeの拡大に伴い, 描画した画像はギザギザになります.これは内部での描画がビットマップだからです. 一方,Image1.Picture.Assigngならばなりません. すぐに確認できるサンプルを用意してあります.もし必要なら試してください. http://mrxray.on.coocan.jp/Delphi/plSamples/172_MetaFile_BasicTest.htm それから,メタファイルの部分拡大したメタファイルの取得ですが, マッピングという方法を利用すると可能です. 以下のコードでは,簡単のために,範囲指定ではなく,拡大して,その部分を保存 しています. 範囲指定するには,換算が必要です. 保存したメタファイルを,イメージを表示するアプリで開き,拡大してみてください. まさにメタファイルであることが確認できます. //============================================================================= // メタファイルの一部を切取ったメタファイルを作成 // // TImageを2つ.共にStretchをTrueに(画像が大きい時も確認可能にするため) // TButtonを1つ // // 任意の範囲だけを取出すには, // SetWindowExtExとSetViewPortOrgExの引数値に工夫が必要 // ここでは簡単にするため,倍率で設定 //============================================================================= procedure TForm1.Button4Click(Sender: TObject); Var Meta : TMetafile; MetaCanvas : TMetafileCanvas; AWidth : Integer; AHeight : Integer; R : Integer; begin Image1.Stretch := True; Image2.Stretch := True; //拡大率 R := 3; Meta := TMetafile.Create; try //対象のメタファイル画像 Meta.LoadFromFile('000.emf'); //元の画像を確認表示 Image1.Picture.Assign(Meta); MetaCanvas := TMetafileCanvas.Create( Meta, 0 ); AWidth := Meta.Width; AHeight := Meta.Height; //マッピング設定 SetMapMode (MetaCanvas.Handle,MM_ANISOTROPIC); SetWindowExtEx (MetaCanvas.Handle,AWidth div R, AHeight div R, nil); SetViewPortExtEx (MetaCanvas.Handle,AWidth, AHeight, nil); //描画原点を移動 //ここでは元の画像の右から30,上から50 SetViewPortOrgEx(MetaCanvas.Handle,-30*R,-50*R,nil); //描画 MetaCanvas.Draw(0,0,Meta);; //描画終了 MetaCanvas.Free; //確認表示(このImage2に表示されている範囲が保存される //ただし,Image2のStretchはTrueとしているので縦横比は正確でない Image2.Picture.Assign(Meta); //保存 Meta.SaveToFile('TestOut.emf'); finally FreeAndNil(Meta); end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.