ダウンロードソースコードをここに:http://www.eyeClaxton.com/download/delphi/ColorSwap.zipロードされたビットマップから赤、緑、青や灰色にプログラムのスワップ色、ピクセルのピクセルによって
はい、私は「主に緑の」何かに「ほとんど青」何かを変換したいです。
私は元のビットマップ(薄い青色)を取り、色(Pixel by Pixel)を赤、緑、青、灰色等価関係に変更したいと考えています。私が何を意味するのかを知るために、私はソースコードとスクリーンショットを含んでいます。どんな助けでも大歓迎です。さらに詳しい情報が必要な場合は、お気軽にお問い合わせください。
以下のコードを見ることができれば、私は助けを求めている3つの機能を持っています。 "RGBToRed、RGBToGreen、RGBToRed"という関数は、私は正しい数式を考え出すことができません。
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TMainFrm = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Panel2: TPanel;
Label2: TLabel;
Button1: TButton;
BeforeImage1: TImage;
AfterImage1: TImage;
RadioGroup1: TRadioGroup;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainFrm: TMainFrm;
implementation
{$R *.DFM}
function RGBToGray(RGBColor: TColor): TColor;
var
Gray: Byte;
begin
Gray := Round(
(0.90 * GetRValue(RGBColor)) +
(0.88 * GetGValue(RGBColor)) +
(0.33 * GetBValue(RGBColor)));
Result := RGB(Gray, Gray, Gray);
end;
function RGBToRed(RGBColor: TColor): TColor;
var
Red: Byte;
begin
// Not sure of the algorithm for this color
Result := RGB(Red, Red, Red);
end;
function RGBToGreen(RGBColor: TColor): TColor;
var
Green: Byte;
begin
// Not sure of the algorithm for this color
Result := RGB(Green, Green, Green);
end;
function RGBToBlue(RGBColor: TColor): TColor;
var
Blue: Byte;
begin
// Not sure of the algorithm for this color
Result := RGB(Blue, Blue, Blue);
end;
procedure TMainFrm.FormCreate(Sender: TObject);
begin
BeforeImage1.Picture.LoadFromFile('Images\RightCenter.bmp');
end;
procedure TMainFrm.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
I, X: Integer;
Color: Integer;
begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile('Images\RightCenter.bmp');
for X := 0 to Bitmap.Height do
begin
for I := 0 to Bitmap.Width do
begin
Color := ColorToRGB(Bitmap.Canvas.Pixels[I, X]);
case Color of
$00000000: ; // Skip any Color Here!
else
case RadioGroup1.ItemIndex of
0: Bitmap.Canvas.Pixels[I, X] := RGBToBlue(Color);
1: Bitmap.Canvas.Pixels[I, X] := RGBToRed(Color);
2: Bitmap.Canvas.Pixels[I, X] := RGBToGreen(Color);
3: Bitmap.Canvas.Pixels[I, X] := RGBToGray(Color);
end;
end;
end;
end;
AfterImage1.Picture.Graphic := Bitmap;
finally
Bitmap.Free;
end;
end;
end.
さて、私はそれが明確になっていないことをお詫び申し上げます。私は、ビットマップ(青の色)を取って、別の色で青のピクセルを交換しようとしています。以下のショットのように。
わかりません。あなたが提供したコードは、どのようにしてあなたが必要としていることをしていないのですか? –
[OK]を、私はあなたがスクリーンショットとコードを提供している顔が好きですが、私はあなたから私たちのものを得ることはありません。何が問題なのですか、あるいはあなたが望むようにどの部分がうまくいかないのですか? –
上記のコードを見ることができたら、私は助けを求めている3つの機能を持っています。 "RGBToRed、RGBToGreen、RGBToRed"という関数は、私は正しい数式を考え出すことができません。 – eyeClaxton