mirror of
https://github.com/moparisthebest/Simba
synced 2025-01-31 15:20:24 -05:00
Donno, need to commit somehow.
This commit is contained in:
parent
46262acec6
commit
2baf3670df
@ -105,6 +105,11 @@ begin;
|
|||||||
result := CurrThread.Client.MBitmaps[Bmp].FastGetPixels(TPA);
|
result := CurrThread.Client.MBitmaps[Bmp].FastGetPixels(TPA);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function ps_GetBitmapAreaColors(bmp,xs, ys, xe, ye: Integer): T2DIntArray;extdecl;
|
||||||
|
begin
|
||||||
|
result := CurrThread.Client.MBitmaps[bmp].GetAreaColors(xs,ys,xe,ye);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure ps_FastSetPixel(Bmp,x,y : integer; Color : TColor); extdecl;
|
procedure ps_FastSetPixel(Bmp,x,y : integer; Color : TColor); extdecl;
|
||||||
begin
|
begin
|
||||||
CurrThread.Client.MBitmaps[bmp].FastSetPixel(x,y,color);
|
CurrThread.Client.MBitmaps[bmp].FastSetPixel(x,y,color);
|
||||||
@ -299,3 +304,15 @@ procedure ps_FloodFillBitmap(bitmap : integer; const StartPoint : TPoint; const
|
|||||||
begin
|
begin
|
||||||
CurrThread.Client.MBitmaps[bitmap].FloodFill(startPoint,searchcol,replacecol);
|
CurrThread.Client.MBitmaps[bitmap].FloodFill(startPoint,searchcol,replacecol);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function ps_CalculatePixelShift(Bmp1,Bmp2 : Integer; CompareBox : TBox) : integer;extdecl;
|
||||||
|
begin
|
||||||
|
with CurrThread.Client.MBitmaps do
|
||||||
|
result := CalculatePixelShift(GetBMP(bmp1),GetBMP(bmp2),comparebox);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ps_CalculatePixelTolerance(Bmp1,Bmp2 : Integer; CompareBox : TBox; CTS : integer) : extended;extdecl;
|
||||||
|
begin
|
||||||
|
with CurrThread.Client.MBitmaps do
|
||||||
|
result := CalculatePixelTolerance(GetBMP(bmp1),GetBMP(bmp2),comparebox,cts);
|
||||||
|
end;
|
||||||
|
@ -304,6 +304,8 @@ AddFunction(@ps_DrawATPABitmapEx,'procedure DrawATPABitmapEx(bitmap: integer; AT
|
|||||||
AddFunction(@ps_DrawBitmap,'procedure DrawBitmap(Bmp: Integer; Dest: TCanvas; x, y: Integer);');
|
AddFunction(@ps_DrawBitmap,'procedure DrawBitmap(Bmp: Integer; Dest: TCanvas; x, y: Integer);');
|
||||||
AddFunction(@ps_RectangleBitmap,'procedure RectangleBitmap(bitmap : integer; const box : TBox; Color : TColor);');
|
AddFunction(@ps_RectangleBitmap,'procedure RectangleBitmap(bitmap : integer; const box : TBox; Color : TColor);');
|
||||||
AddFunction(@ps_FloodfillBitmap,'procedure FloodFillBitmap(bitmap : integer; const StartPoint : TPoint; const SearchCol,ReplaceCol : TColor);');
|
AddFunction(@ps_FloodfillBitmap,'procedure FloodFillBitmap(bitmap : integer; const StartPoint : TPoint; const SearchCol,ReplaceCol : TColor);');
|
||||||
|
AddFunction(@ps_CalculatePixelShift,'function CalculatePixelShift(Bmp1,Bmp2 : Integer; CompareBox : TBox) : integer;');
|
||||||
|
AddFunction(@ps_CalculatePixelTolerance,'function CalculatePixelTolerance(Bmp1,Bmp2 : Integer; CompareBox : TBox; CTS : integer) : extended;');
|
||||||
|
|
||||||
{tpa}
|
{tpa}
|
||||||
SetCurrSection('TPA');
|
SetCurrSection('TPA');
|
||||||
|
@ -63,6 +63,7 @@ type
|
|||||||
function CreateTPA(SearchCol : TColor) : TPointArray;
|
function CreateTPA(SearchCol : TColor) : TPointArray;
|
||||||
function FastGetPixel(x,y : integer) : TColor;
|
function FastGetPixel(x,y : integer) : TColor;
|
||||||
function FastGetPixels(Points : TPointArray) : TIntegerArray;
|
function FastGetPixels(Points : TPointArray) : TIntegerArray;
|
||||||
|
function GetAreaColors(xs,ys,xe,ye : integer) : T2DIntArray;
|
||||||
procedure FastDrawClear(Color : TColor);
|
procedure FastDrawClear(Color : TColor);
|
||||||
procedure FastDrawTransparent(x, y: Integer; TargetBitmap: TMufasaBitmap);
|
procedure FastDrawTransparent(x, y: Integer; TargetBitmap: TMufasaBitmap);
|
||||||
procedure FastReplaceColor(OldColor, NewColor: TColor);
|
procedure FastReplaceColor(OldColor, NewColor: TColor);
|
||||||
@ -91,6 +92,7 @@ type
|
|||||||
procedure SetTransparentColor(Col : TColor);
|
procedure SetTransparentColor(Col : TColor);
|
||||||
function GetTransparentColor : TColor;
|
function GetTransparentColor : TColor;
|
||||||
property TransparentColorSet : boolean read FTransparentSet;
|
property TransparentColorSet : boolean read FTransparentSet;
|
||||||
|
procedure SetAlphaValue(const value : byte);
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy;override;
|
destructor Destroy;override;
|
||||||
end;
|
end;
|
||||||
@ -120,7 +122,8 @@ type
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
Procedure ArrDataToRawImage(Ptr: PRGB32; Size: TPoint; out RawImage: TRawImage);
|
Procedure ArrDataToRawImage(Ptr: PRGB32; Size: TPoint; out RawImage: TRawImage);
|
||||||
|
function CalculatePixelShift(Bmp1,Bmp2 : TMufasaBitmap; CompareBox : TBox) : integer;
|
||||||
|
function CalculatePixelTolerance(Bmp1,Bmp2 : TMufasaBitmap; CompareBox : TBox; CTS : integer) : extended;
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
@ -162,6 +165,68 @@ Begin
|
|||||||
RawImage.Data := PByte(Ptr);
|
RawImage.Data := PByte(Ptr);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
function CalculatePixelShift(Bmp1, Bmp2: TMufasaBitmap; CompareBox: TBox): integer;
|
||||||
|
var
|
||||||
|
x,y : integer;
|
||||||
|
w1,w2 : integer;
|
||||||
|
begin
|
||||||
|
Bmp1.ValidatePoint(comparebox.x1,comparebox.y1);
|
||||||
|
Bmp1.ValidatePoint(comparebox.x2,comparebox.y2);
|
||||||
|
Bmp2.ValidatePoint(comparebox.x1,comparebox.y1);
|
||||||
|
Bmp2.ValidatePoint(comparebox.x1,comparebox.y1);
|
||||||
|
Bmp1.SetAlphaValue(0);
|
||||||
|
Bmp2.SetAlphaValue(0);
|
||||||
|
w1 := bmp1.Width;
|
||||||
|
w2 := bmp2.width;
|
||||||
|
result := 0;
|
||||||
|
for y := CompareBox.y1 to CompareBox.y2 do
|
||||||
|
for x := CompareBox.x1 to CompareBox.x2 do
|
||||||
|
if LongWord(Bmp1.FData[y * w1 + x]) <> LongWord(Bmp2.Fdata[y * w2 + x]) then
|
||||||
|
inc(result);
|
||||||
|
end;
|
||||||
|
//CTS 0 counts the average difference in R,G,B per pixel
|
||||||
|
//CTS 1 counts the average difference using SQRT(Sqr(r) + sqr(g)+sqr(b));
|
||||||
|
function CalculatePixelTolerance(Bmp1, Bmp2: TMufasaBitmap; CompareBox: TBox;
|
||||||
|
CTS: integer): extended;
|
||||||
|
var
|
||||||
|
x,y : integer;
|
||||||
|
w1,w2 : integer;
|
||||||
|
Diff : int64;
|
||||||
|
begin
|
||||||
|
Bmp1.ValidatePoint(comparebox.x1,comparebox.y1);
|
||||||
|
Bmp1.ValidatePoint(comparebox.x2,comparebox.y2);
|
||||||
|
Bmp2.ValidatePoint(comparebox.x1,comparebox.y1);
|
||||||
|
Bmp2.ValidatePoint(comparebox.x1,comparebox.y1);
|
||||||
|
Bmp1.SetAlphaValue(0);
|
||||||
|
Bmp2.SetAlphaValue(0);
|
||||||
|
w1 := bmp1.Width;
|
||||||
|
w2 := bmp2.width;
|
||||||
|
result := 0;
|
||||||
|
if not InRange(CTS,0,1) then
|
||||||
|
raise exception.CreateFmt('CTS Passed to CalculateTolerance must be in [0..1], it currently is %d',[CTS]);
|
||||||
|
case CTS of
|
||||||
|
0 : begin
|
||||||
|
Diff := 0;
|
||||||
|
for y := CompareBox.y1 to CompareBox.y2 do
|
||||||
|
for x := CompareBox.x1 to CompareBox.x2 do
|
||||||
|
begin
|
||||||
|
Diff := Diff + abs(Bmp1.FData[y * w1 + x].r-Bmp2.Fdata[y * w2 + x].r) +
|
||||||
|
abs(Bmp1.FData[y * w1 + x].g-Bmp2.Fdata[y * w2 + x].g) +
|
||||||
|
abs(Bmp1.FData[y * w1 + x].b-Bmp2.Fdata[y * w2 + x].b);
|
||||||
|
end;
|
||||||
|
Result := Diff / (3 * (CompareBox.x2 - CompareBox.x1 + 1) * (CompareBox.y2-CompareBox.y1 + 1)); //We want the value for the whole Pixel; so divide by 3 (RGB)
|
||||||
|
end;
|
||||||
|
1 : begin
|
||||||
|
for y := CompareBox.y1 to CompareBox.y2 do
|
||||||
|
for x := CompareBox.x1 to CompareBox.x2 do
|
||||||
|
Result := Result + Sqrt(Sqr(Bmp1.FData[y * w1 + x].r-Bmp2.Fdata[y * w2 + x].r) +
|
||||||
|
Sqr(Bmp1.FData[y * w1 + x].g-Bmp2.Fdata[y * w2 + x].g) +
|
||||||
|
Sqr(Bmp1.FData[y * w1 + x].b-Bmp2.Fdata[y * w2 + x].b));
|
||||||
|
Result := Result / ((CompareBox.x2 - CompareBox.x1 + 1) * (CompareBox.y2-CompareBox.y1 + 1)); //We want the value for the whole Pixel;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function Min(a,b:integer) : integer;
|
function Min(a,b:integer) : integer;
|
||||||
begin
|
begin
|
||||||
if a < b then
|
if a < b then
|
||||||
@ -491,6 +556,7 @@ begin
|
|||||||
ValidatePoint(StartPT.x,StartPT.y);
|
ValidatePoint(StartPT.x,StartPT.y);
|
||||||
Search := LongWord(RGBToBGR(SearchCol));
|
Search := LongWord(RGBToBGR(SearchCol));
|
||||||
Replace := LongWord(RGBToBGR(ReplaceCol));
|
Replace := LongWord(RGBToBGR(ReplaceCol));
|
||||||
|
SetAlphaValue(0);
|
||||||
if LongWord(FData[StartPT.y * w + StartPT.x]) <> Search then //Only add items to the stack that are the searchcol.
|
if LongWord(FData[StartPT.y * w + StartPT.x]) <> Search then //Only add items to the stack that are the searchcol.
|
||||||
Exit;
|
Exit;
|
||||||
SetLength(Stack,w * h);
|
SetLength(Stack,w * h);
|
||||||
@ -781,6 +847,18 @@ begin
|
|||||||
Result[i] := BGRToRGB(FData[Points[i].y*w + Points[i].x]);
|
Result[i] := BGRToRGB(FData[Points[i].y*w + Points[i].x]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TMufasaBitmap.GetAreaColors(xs, ys, xe, ye : integer): T2DIntArray;
|
||||||
|
var
|
||||||
|
x,y : integer;
|
||||||
|
begin
|
||||||
|
ValidatePoint(xs,ys);
|
||||||
|
ValidatePoint(xe,ye);
|
||||||
|
setlength(result,xe-xs+1,ye-ys+1);
|
||||||
|
for x := xs to xe do
|
||||||
|
for y := ys to ye do
|
||||||
|
result[x-xs][y-ys] := BGRToRGB(FData[y*w+x]);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TMufasaBitmap.SetTransparentColor(Col: TColor);
|
procedure TMufasaBitmap.SetTransparentColor(Col: TColor);
|
||||||
begin
|
begin
|
||||||
self.FTransparentSet:= True;
|
self.FTransparentSet:= True;
|
||||||
@ -795,6 +873,14 @@ begin
|
|||||||
raise Exception.CreateFmt('Transparent color for Bitmap[%d] isn''t set',[index]);
|
raise Exception.CreateFmt('Transparent color for Bitmap[%d] isn''t set',[index]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TMufasaBitmap.SetAlphaValue(const value: byte);
|
||||||
|
var
|
||||||
|
i : integer;
|
||||||
|
begin
|
||||||
|
for i := w * h - 1 downto 0 do
|
||||||
|
FData[i].A:= Value;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TMufasaBitmap.FastDrawClear(Color: TColor);
|
procedure TMufasaBitmap.FastDrawClear(Color: TColor);
|
||||||
var
|
var
|
||||||
i : integer;
|
i : integer;
|
||||||
|
Loading…
Reference in New Issue
Block a user