掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
アンチエイリアスを効かせるにはどうしたらいいでしょうか (ID:41251)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ぱっと見ですが、MS Wordはメタファイルを独自で描画しているみたいですね。 MS Word上で一度でも編集すると全てにアンチエイリアスがかかるみたいですよ。 MS ペイントに描かせるとやはりアンチエイリアスはかかりません。 どの環境でもアンチエイリアスをかけるのはDEKOさんの方法しか無いようですが、 せめて自分のアプリ内だけでも…というならそのままでもいける方法はあります。 メタファイルを2倍の大きさでBmpに出力後、1/2するとアンチエイリアスが掛かった描画になります。 手持ちソースの切り抜きですがよかったらどうぞ。 type TByteARGB = record B:Byte; G:Byte; R:Byte; A:Byte; end; PByteARGB = ^TByteARGB; procedure BmpHalf(SrcBmp,DestBmp:TBitmap); var aW,aH,x,y,p,step:Integer; pS: array [0..1] of PByteARGB; pD:PByteARGB; R,G,B:Integer; begin aW := SrcBmp.Width div 2; aH := SrcBmp.Height div 2; step := SrcBmp.Width; DestBmp.SetSize(aW,aH); pS[0] := SrcBmp.ScanLine[SrcBmp.Height-1]; for p := 1 to 1 do begin pS[p] := pS[p-1]; inc(pS[p], SrcBmp.Width); end; pD := DestBmp.ScanLine[DestBmp.Height-1]; for y := 0 to aH-1 do begin for x := 0 to aW-1 do begin R:=0; G:=0; B:=0; for p := 0 to 1 do begin R:=R+ps[p]^.R; G:=G+ps[p]^.G; B:=B+ps[p]^.B; inc(pS[p]); R:=R+ps[p]^.R; G:=G+ps[p]^.G; B:=B+ps[p]^.B; inc(pS[p]); end; R := R shr 2; G := G shr 2; B := B shr 2; pD^.R := R; pD^.G := G; pD^.B := B; inc(pD); end; for p := 0 to 1 do inc(pS[p], step); end; end; procedure EMFToBMPwithAntialiasing(aMetafile: TMetafile; var aBmp:TBitmap); var aBmp2:TBitmap; begin aBmp.PixelFormat:=pf32bit; aBmp.SetSize(aMetafile.Width,aMetafile.Height); aBmp2:=TBitmap.Create; aBmp2.PixelFormat:=pf32bit; aBmp2.SetSize(aMetafile.Width*2,aMetafile.Height*2); aBmp2.Canvas.StretchDraw(Rect(0,0,aBmp2.Width,aBmp2.Height),aMetafile); BmpHalf(aBmp2,aBmp); aBmp2.Free; end; //----------------------------------------------------------------------- aBmp:=TBitmap.Create; aBmp.SetSize(Metafile.Width,Metafile.Height); EMFToBMPwithAntialiasing(Metafile,aBmp); Image1.Picture.Assign(aBmp); aBmp.Free; //Image1.Picture.Assign(Metafile);
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.