掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ScanLineで色(RGB)を取得してその色を加工塗布 (ID:40499)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
(D6パーソナル) 先日画像回転の高速化でScanLineを教えていただき高速化に成功しました。 どうせなら回転時にピクセル毎の色を加工して一度で色の加工処理をして一層の高速化をしたいと思います。現在のソースの要点は下記のようにしていますが pDests[iy][ix] := pSources[my][mx]; のところで色を取得して、例えば(一定以上の明るさであれば星と判定みたいに選別するとして) if R+G+B>50 then begin R1:=255; G1:=255; B1:=255; //適当なRGBを指定したい end; このR1,G1,B1を回転後のピクセルに塗る、という処理をしたいのですがScanLineは初めてでやりかたがわかりません。よろしくお願いします。 var Dest: TBitmap; pSources, pDests: array of PRGBArray; soWidth, soHeight, deWidth, deHeight: Integer; (その他は省略) Begin (幅、高、中心座標などの計算と設定) //** 回転後画像の設定 Dest := TBitmap.Create; deWidth := sowidth; deHeight := soheight; try Dest.PixelFormat := pf24bit; dest.Width:=sowidth; dest.Height:=soheight; with Dest.Canvas do //白く塗る begin Brush.Color := clWhite; FillRect(Rect(0, 0, soWidth, soHeight)); end; //** ScanLineキャッシュの作成 //== 元画像 SetLength(pSources, soHeight); for I := 0 to soHeight - 1 do pSources[I] := Source.ScanLine[I]; //== 回転後の画像 SetLength(pDests, deHeight); for I := 0 to deHeight - 1 do pDests[I] := Dest.ScanLine[I]; //## 画像の回転 for iy := 0 to soHeight - 1 do begin dy:=iy-cy; //cy=高さ/2 for ix := 0 to soWidth - 1 do begin dx:=ix-cx; //cx=幅/2 mx := Trunc(CosRad * dx - SinRad * dy + 0.5+cx); my := Trunc(SinRad * dx + CosRad * dy + 0.5+cy); if (mx<sowidth) and (mx>0) and (my<soheight) and (my>0) then begin pDests[iy][ix] := pSources[my][mx]; end; end; //ix end; //iy finally Source.Free; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.