掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ビットマップ画像をトリミングするには? (ID:8393)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
はじめまして 以下はScanLineで色を取得する関数です。 24bit形式のビットマップ限定です。 type TRGB = record B, G, R: Byte;//ビットマップは内部で逆順に並んでいるので。 end; TRGBArray = array[0..50000000] of TRGB; PRGBArray = ^TRGBArray; var w, h: integer; bmp1: TBitmap; source: Array of Pointer; procedure BMP(); var i,x,y: integer; r, g, b: Byte; begin bmp1 := TBitmap.Create; try bmp1.LoadFromFile('***.bmp'); bmp1.PixelFormat := pf24bit; w := bmp1.Width; h := bmp1.Height; SetLength(Source, h); for i:=0 to h-1 do begin Source[i] := bmp1.ScanLine[i];//ScanLineを一度、配列にコピー end; for y:=0 to h-1 do begin for x:=0 to w-1 do begin R := TRGB(PRGBArray(Source[h-1-y])^[x]).R; G := TRGB(PRGBArray(Source[h-1-y])^[x]).G; B := TRGB(PRGBArray(Source[h-1-y])^[x]).B; if ((B > 230) and (G > 230) and (R > 230)) then //各色が230以上であれば、白と判断 begin //ここで何らかのトリミング処理をしてください。 TRGB(PRGBArray(Source[h-1-y])^[x]).R := 0; TRGB(PRGBArray(Source[h-1-y])^[x]).G := 0; TRGB(PRGBArray(Source[h-1-y])^[x]).B := 0; end else begin //白でない場合の処理 end; end; end; Form1.Image1.Canvas.Draw(0,0,bmp1); finally Finalize(Source); bmp1.Free; end; end; WhiteはR,G,Bが各255なのですが、厳密に判断すると白の範囲が狭くなるの で、230以上としました。 とりあえず、ここでは白を黒くするという処理にしています。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.