You've already forked lazarus-ccr
Replace one color with another.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1601 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -60,6 +60,7 @@ type
|
||||
procedure RGBDelta(RedChange, GreenChange, BlueChange: integer);
|
||||
procedure Brightness(ValueChange: integer);
|
||||
procedure Contrast(ValueChange: integer);
|
||||
procedure ColorReplace(ColorFrom, ColorTo: TColor);
|
||||
property ScanLine[Row: integer]: pRGBATriple read GetScanLine;
|
||||
procedure FillEllipse(X1, Y1, X2, Y2: integer); virtual;
|
||||
procedure CutToClipboard; virtual;
|
||||
@ -127,6 +128,7 @@ function GetRColor(const Color: TColor): byte;
|
||||
function GetGColor(const Color: TColor): byte;
|
||||
function GetBColor(const Color: TColor): byte;
|
||||
procedure SprayPoints(aCanvas: TCanvas; X, Y: integer; Radians: integer; PColor: TColor);
|
||||
procedure DLBMPColorReplace(aBitmap: TDLBitmap; ColorFrom, ColorTo: TColor);
|
||||
|
||||
implementation
|
||||
|
||||
@ -424,6 +426,11 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TDLBitmap.ColorReplace(ColorFrom, ColorTo: TColor);
|
||||
begin
|
||||
DLBMPColorReplace(Self, ColorFrom, ColorTo);
|
||||
end;
|
||||
|
||||
constructor TTextEdit.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited;
|
||||
|
@ -260,9 +260,9 @@ begin
|
||||
for j := 0 to ABitmap.Width - 1 do
|
||||
begin
|
||||
LNew := LScan[j];
|
||||
LScan[j].rgbtBlue := LScan[j].rgbtBlue * Value div 100; //Value; //LNew.rgbtBlue;
|
||||
LScan[j].rgbtGreen := LScan[j].rgbtGreen * Value div 100; //LNew.rgbtGreen;
|
||||
LScan[j].rgbtRed := LScan[j].rgbtRed * Value div 100; //LNew.rgbtRed;
|
||||
LScan[j].rgbtBlue := LScan[j].rgbtBlue * Value div 100;
|
||||
LScan[j].rgbtGreen := LScan[j].rgbtGreen * Value div 100;
|
||||
LScan[j].rgbtRed := LScan[j].rgbtRed * Value div 100;
|
||||
end;
|
||||
end;
|
||||
ABitmap.InvalidateScanLine;
|
||||
@ -596,5 +596,29 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure DLBMPColorReplace(aBitmap: TDLBitmap; ColorFrom, ColorTo: TColor);
|
||||
var
|
||||
LScan: pRGBATriple;
|
||||
i, j: integer;
|
||||
begin
|
||||
for i := 0 to aBitmap.Height - 1 do
|
||||
begin
|
||||
LScan := aBitmap.Scanline[i];
|
||||
for j := 0 to ABitmap.Width - 1 do
|
||||
begin
|
||||
if (LScan[j].rgbtBlue = GetBColor(ColorFrom)) and
|
||||
(LScan[j].rgbtGreen = GetGColor(ColorFrom)) and
|
||||
(LScan[j].rgbtRed = GetRColor(ColorFrom)) then
|
||||
begin
|
||||
LScan[j].rgbtBlue := GetBColor(ColorTo);
|
||||
LScan[j].rgbtGreen := GetGColor(ColorTo);
|
||||
LScan[j].rgbtRed := GetRColor(ColorTo);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
aBitmap.InvalidateScanLine;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -49,7 +49,7 @@
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="1"/>
|
||||
<CursorPos X="14" Y="4"/>
|
||||
<UsageCount Value="73"/>
|
||||
<UsageCount Value="74"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="main.pas"/>
|
||||
@ -58,22 +58,23 @@
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="Main"/>
|
||||
<IsVisibleTab Value="True"/>
|
||||
<EditorIndex Value="0"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="10"/>
|
||||
<CursorPos X="72" Y="1197"/>
|
||||
<UsageCount Value="73"/>
|
||||
<TopLine Value="1096"/>
|
||||
<CursorPos X="25" Y="1112"/>
|
||||
<UsageCount Value="74"/>
|
||||
<Loaded Value="True"/>
|
||||
<LoadedDesigner Value="True"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<UnitName Value="PictureCtrls"/>
|
||||
<EditorIndex Value="1"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="25"/>
|
||||
<CursorPos X="3" Y="44"/>
|
||||
<TopLine Value="1165"/>
|
||||
<CursorPos X="42" Y="1176"/>
|
||||
<UsageCount Value="31"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit2>
|
||||
<Unit3>
|
||||
<Filename Value="preview.pas"/>
|
||||
@ -175,7 +176,7 @@
|
||||
<Unit13>
|
||||
<Filename Value="picturemanager.pas"/>
|
||||
<UnitName Value="PictureManager"/>
|
||||
<EditorIndex Value="1"/>
|
||||
<EditorIndex Value="2"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="1"/>
|
||||
<CursorPos X="95" Y="2"/>
|
||||
@ -354,10 +355,11 @@
|
||||
<Unit35>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<UnitName Value="DLBitmap"/>
|
||||
<EditorIndex Value="2"/>
|
||||
<IsVisibleTab Value="True"/>
|
||||
<EditorIndex Value="3"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="506"/>
|
||||
<CursorPos X="39" Y="520"/>
|
||||
<TopLine Value="110"/>
|
||||
<CursorPos X="1" Y="131"/>
|
||||
<UsageCount Value="15"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit35>
|
||||
@ -387,10 +389,10 @@
|
||||
</Unit38>
|
||||
<Unit39>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<EditorIndex Value="3"/>
|
||||
<EditorIndex Value="4"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="483"/>
|
||||
<CursorPos X="97" Y="5"/>
|
||||
<TopLine Value="593"/>
|
||||
<CursorPos X="50" Y="611"/>
|
||||
<UsageCount Value="13"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit39>
|
||||
@ -406,123 +408,123 @@
|
||||
<JumpHistory Count="30" HistoryIndex="29">
|
||||
<Position1>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="637" Column="13" TopLine="605"/>
|
||||
<Caret Line="1208" Column="28" TopLine="1194"/>
|
||||
</Position1>
|
||||
<Position2>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="644" Column="13" TopLine="612"/>
|
||||
<Caret Line="6" Column="87" TopLine="1"/>
|
||||
</Position2>
|
||||
<Position3>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="658" Column="13" TopLine="626"/>
|
||||
<Caret Line="100" Column="21" TopLine="68"/>
|
||||
</Position3>
|
||||
<Position4>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="665" Column="13" TopLine="633"/>
|
||||
<Caret Line="113" Column="17" TopLine="81"/>
|
||||
</Position4>
|
||||
<Position5>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="835" Column="13" TopLine="803"/>
|
||||
<Caret Line="133" Column="17" TopLine="101"/>
|
||||
</Position5>
|
||||
<Position6>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="842" Column="29" TopLine="806"/>
|
||||
<Caret Line="137" Column="21" TopLine="105"/>
|
||||
</Position6>
|
||||
<Position7>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="480" Column="28" TopLine="462"/>
|
||||
<Caret Line="177" Column="20" TopLine="145"/>
|
||||
</Position7>
|
||||
<Position8>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="842" Column="24" TopLine="823"/>
|
||||
<Caret Line="183" Column="16" TopLine="151"/>
|
||||
</Position8>
|
||||
<Position9>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="70" Column="91" TopLine="62"/>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="257" Column="27" TopLine="225"/>
|
||||
</Position9>
|
||||
<Position10>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="448" Column="26" TopLine="434"/>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1197" Column="72" TopLine="10"/>
|
||||
</Position10>
|
||||
<Position11>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="82" Column="16" TopLine="63"/>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1198" Column="72" TopLine="1167"/>
|
||||
</Position11>
|
||||
<Position12>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="468" Column="3" TopLine="442"/>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1199" Column="72" TopLine="1168"/>
|
||||
</Position12>
|
||||
<Position13>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="6" Column="103" TopLine="25"/>
|
||||
<Caret Line="1198" Column="72" TopLine="1167"/>
|
||||
</Position13>
|
||||
<Position14>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1195" Column="8" TopLine="1187"/>
|
||||
<Caret Line="1199" Column="72" TopLine="1168"/>
|
||||
</Position14>
|
||||
<Position15>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="316" Column="39" TopLine="297"/>
|
||||
<Caret Line="1201" Column="72" TopLine="1170"/>
|
||||
</Position15>
|
||||
<Position16>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1196" Column="66" TopLine="1183"/>
|
||||
<Caret Line="1337" Column="3" TopLine="1329"/>
|
||||
</Position16>
|
||||
<Position17>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="556" Column="32" TopLine="530"/>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1344" Column="3" TopLine="1336"/>
|
||||
</Position17>
|
||||
<Position18>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1208" Column="28" TopLine="1194"/>
|
||||
<Caret Line="1105" Column="26" TopLine="1096"/>
|
||||
</Position18>
|
||||
<Position19>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1209" Column="28" TopLine="1195"/>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="193" Column="57" TopLine="181"/>
|
||||
</Position19>
|
||||
<Position20>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1208" Column="28" TopLine="1194"/>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="510" Column="30" TopLine="506"/>
|
||||
</Position20>
|
||||
<Position21>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1209" Column="28" TopLine="1195"/>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="1176" Column="33" TopLine="1159"/>
|
||||
</Position21>
|
||||
<Position22>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="1208" Column="28" TopLine="1194"/>
|
||||
<Filename Value="DLBitmap.pas"/>
|
||||
<Caret Line="428" Column="28" TopLine="409"/>
|
||||
</Position22>
|
||||
<Position23>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="6" Column="87" TopLine="1"/>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<Caret Line="4" Column="96" TopLine="1"/>
|
||||
</Position23>
|
||||
<Position24>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="100" Column="21" TopLine="68"/>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<Caret Line="601" Column="1" TopLine="588"/>
|
||||
</Position24>
|
||||
<Position25>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="113" Column="17" TopLine="81"/>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<Caret Line="13" Column="89" TopLine="5"/>
|
||||
</Position25>
|
||||
<Position26>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="133" Column="17" TopLine="101"/>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<Caret Line="615" Column="45" TopLine="591"/>
|
||||
</Position26>
|
||||
<Position27>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="137" Column="21" TopLine="105"/>
|
||||
<Filename Value="DLBmpUtils.inc"/>
|
||||
<Caret Line="616" Column="59" TopLine="593"/>
|
||||
</Position27>
|
||||
<Position28>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="177" Column="20" TopLine="145"/>
|
||||
<Caret Line="1106" Column="31" TopLine="1096"/>
|
||||
</Position28>
|
||||
<Position29>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="183" Column="16" TopLine="151"/>
|
||||
<Caret Line="1112" Column="25" TopLine="1096"/>
|
||||
</Position29>
|
||||
<Position30>
|
||||
<Filename Value="main.pas"/>
|
||||
<Caret Line="257" Column="27" TopLine="225"/>
|
||||
<Filename Value="picturectrls.pas"/>
|
||||
<Caret Line="188" Column="27" TopLine="172"/>
|
||||
</Position30>
|
||||
</JumpHistory>
|
||||
</ProjectOptions>
|
||||
|
@ -1,7 +1,7 @@
|
||||
object MainForm: TMainForm
|
||||
Left = 260
|
||||
Left = 180
|
||||
Height = 681
|
||||
Top = 147
|
||||
Top = 90
|
||||
Width = 920
|
||||
Caption = 'Lazarus Image Editor'
|
||||
ClientHeight = 659
|
||||
@ -1105,6 +1105,33 @@
|
||||
OnClick = ToolMaskFloodFillClick
|
||||
end
|
||||
end
|
||||
object BtnFromColor: TColorButton
|
||||
Left = 421
|
||||
Height = 25
|
||||
Top = 4
|
||||
Width = 43
|
||||
BorderWidth = 2
|
||||
ButtonColorSize = 16
|
||||
ButtonColor = clBlack
|
||||
end
|
||||
object BtnToColor: TColorButton
|
||||
Left = 488
|
||||
Height = 25
|
||||
Top = 4
|
||||
Width = 43
|
||||
BorderWidth = 2
|
||||
ButtonColorSize = 16
|
||||
ButtonColor = clBlack
|
||||
OnClick = BtnToColorClick
|
||||
end
|
||||
object Label1: TLabel
|
||||
Left = 469
|
||||
Height = 20
|
||||
Top = 5
|
||||
Width = 14
|
||||
Caption = 'to'
|
||||
ParentColor = False
|
||||
end
|
||||
end
|
||||
object PanelToolOptions: TPanel
|
||||
Left = 0
|
||||
@ -1348,9 +1375,9 @@
|
||||
TabOrder = 5
|
||||
object checkFuzzy: TCheckBox
|
||||
Left = 4
|
||||
Height = 19
|
||||
Top = 9
|
||||
Width = 20
|
||||
Height = 23
|
||||
Top = 5
|
||||
Width = 24
|
||||
OnChange = checkFuzzyChange
|
||||
TabOrder = 0
|
||||
end
|
||||
@ -2071,6 +2098,10 @@
|
||||
Caption = 'Grayscale'
|
||||
OnClick = ColorsGrayscaleExecute
|
||||
end
|
||||
object MenuItem5: TMenuItem
|
||||
Caption = 'Replace'
|
||||
OnClick = MenuItem5Click
|
||||
end
|
||||
object MenuItemDisable: TMenuItem
|
||||
Caption = 'Disable'
|
||||
OnClick = ColorsDisableExecute
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -42,6 +42,8 @@ type
|
||||
TMainForm = class(TForm)
|
||||
ActionList: TActionList;
|
||||
checkFuzzy: TCheckBox;
|
||||
BtnFromColor: TColorButton;
|
||||
BtnToColor: TColorButton;
|
||||
ColorsDisable: TAction;
|
||||
ColorsGrayscale: TAction;
|
||||
ColorsInvert: TAction;
|
||||
@ -61,10 +63,12 @@ type
|
||||
FileSaveAs: TAction;
|
||||
FlipHorizontally: TAction;
|
||||
FlipVertically: TAction;
|
||||
Label1: TLabel;
|
||||
LabelTolerance1: TLabel;
|
||||
LabelTolerance2: TLabel;
|
||||
MaskInvert: TAction;
|
||||
MaskRemove: TAction;
|
||||
MenuItem5: TMenuItem;
|
||||
Palette: TColorPalette;
|
||||
MenuItemShowGrid: TMenuItem;
|
||||
Panel1: TPanel;
|
||||
@ -215,6 +219,7 @@ type
|
||||
ViewShowGrid: TAction;
|
||||
ViewShowMask: TAction;
|
||||
procedure checkFuzzyChange(Sender: TObject);
|
||||
procedure BtnToColorClick(Sender: TObject);
|
||||
procedure ColorsDisableExecute(Sender: TObject);
|
||||
procedure ColorsGrayscaleExecute(Sender: TObject);
|
||||
procedure ColorsInvertExecute(Sender: TObject);
|
||||
@ -245,6 +250,7 @@ type
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure MaskInvertExecute(Sender: TObject);
|
||||
procedure MaskRemoveExecute(Sender: TObject);
|
||||
procedure MenuItem5Click(Sender: TObject);
|
||||
procedure MenuItemAboutClick(Sender: TObject);
|
||||
procedure MenuItemClipPaperToMaskClick(Sender: TObject);
|
||||
procedure MenuItemExitClick(Sender: TObject);
|
||||
@ -1099,6 +1105,13 @@ begin
|
||||
ActivePictureEdit.RemoveMask;
|
||||
end;
|
||||
|
||||
procedure TMainForm.MenuItem5Click(Sender: TObject);
|
||||
begin
|
||||
if not Pictures.CanEdit then
|
||||
Exit;
|
||||
ActivePictureEdit.ColorReplace(BtnFromColor.ButtonColor, BtnToColor.ButtonColor);
|
||||
end;
|
||||
|
||||
procedure TMainForm.MenuItemAboutClick(Sender: TObject);
|
||||
begin
|
||||
AboutDialogForm := TAboutDialogForm.Create(Self);
|
||||
@ -1328,6 +1341,11 @@ begin
|
||||
ActivePictureEdit.Fuzzy := checkFuzzy.Checked;
|
||||
end;
|
||||
|
||||
procedure TMainForm.BtnToColorClick(Sender: TObject);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TMainForm.EditSizeChange(Sender: TObject);
|
||||
begin
|
||||
if not Pictures.CanEdit then
|
||||
|
@ -185,6 +185,7 @@ type
|
||||
procedure Rotate90Clockwise;
|
||||
procedure Rotate180Clockwise;
|
||||
procedure Rotate270Clockwise;
|
||||
procedure ColorReplace(ColorFrom, ColorTo: TColor);
|
||||
|
||||
procedure StretchTruncate(AWidth, AHeight: integer);
|
||||
procedure StretchSmooth(AWidth, AHeight: integer; Method: TSmoothMethod);
|
||||
@ -1172,6 +1173,19 @@ begin
|
||||
UpdatePicture;
|
||||
end;
|
||||
|
||||
procedure TCustomPictureEdit.ColorReplace(ColorFrom, ColorTo: TColor);
|
||||
begin
|
||||
if Picture = nil then
|
||||
Exit;
|
||||
BeginDraw;
|
||||
try
|
||||
Picture.ColorReplace(ColorFrom, ColorTo);
|
||||
finally
|
||||
EndDraw;
|
||||
end;
|
||||
UpdatePicture;
|
||||
end;
|
||||
|
||||
procedure TCustomPictureEdit.StretchTruncate(AWidth, AHeight: integer);
|
||||
begin
|
||||
if Picture = nil then
|
||||
|
Reference in New Issue
Block a user