Guten Morgen,
also noch mal zu diesem Thema.
Mit folgendem Code, habe ich das was ich ursprünglich wollte auch hinbekommen:
Delphi-Quellcode:
procedure Antialiasing(
const DC: TCanvas;
const Rectangle: TRect; wiederhol: integer);
type
TRGBTripleArray =
array[0..32768]
of TRGBTriple;
// 32768 = maximale Anzahl der Pixel in der Breite eines Bildes (also eine "ScanLine")
pRGBTripleArray = ^TRGBTripleArray;
// Pointer auf TRGBTripleArray
var
cx, cy: Smallint;
r, g, b: Byte;
Row1: pRGBTripleArray;
Row2: pRGBTripleArray;
Row3: pRGBTripleArray;
TEMP: TBitmap;
CurRect: TRect;
i: shortint;
begin
TEMP := TBitmap.Create;
try
for i := 0
to wiederhol
do
begin
with TEMP
do begin
Width := Rectangle.Right - Rectangle.Left;
Height := Rectangle.Bottom - Rectangle.Top;
CurRect := Rect(0, 0, Width, Height);
PixelFormat := pf24Bit;
Canvas.CopyRect(CurRect,
DC, Rectangle);
with Canvas
do begin
for cy := 1
to (Height - 2)
do begin
Row1 := ScanLine[cy - 1];
Row2 := ScanLine[cy];
Row3 := ScanLine[cy + 1];
for cx := 1
to (Width - 2)
do begin
r := (Row1[cx - 1].rgbtRed+Row1[cx].rgbtRed+
Row1[cx + 1].rgbtRed+
Row2[cx - 1].rgbtRed+
Row2[cx + 1].rgbtRed+
Row2[cx - 1].rgbtRed+
Row3[cx].rgbtRed+
Row3[cx + 1].rgbtRed+
Row3[cx].rgbtRed)
div 9;
g := (Row1[cx - 1].rgbtGreen+
Row1[cx].rgbtGreen+
Row1[cx + 1].rgbtGreen+
Row2[cx - 1].rgbtGreen+
Row2[cx + 1].rgbtGreen+
Row2[cx - 1].rgbtGreen+
Row3[cx].rgbtGreen+
Row3[cx + 1].rgbtGreen+
Row3[cx].rgbtGreen)
div 9;
b := (Row1[cx - 1].rgbtBlue+
Row1[cx].rgbtBlue+
Row1[cx + 1].rgbtBlue+
Row2[cx - 1].rgbtBlue+
Row2[cx + 1].rgbtBlue+
Row2[cx - 1].rgbtBlue+
Row3[cx].rgbtBlue+
Row3[cx + 1].rgbtBlue+
Row3[cx].rgbtBlue)
div 9;
Row2[cx].rgbtBlue := b;
Row2[cx].rgbtGreen := g;
Row2[cx].rgbtRed := r;
end;
end;
end;
DC.CopyRect(Rectangle, Canvas, CurRect);
end;
end;
finally
TEMP.Free;
end;
end;
Der Aufruf dazu:
Antialiasing(Form1.canvas, Digilabel.BoundsRect, 1);
wobei Digilabel natürlich meine Anzeige Komponente ist.
Nun habe ich das ja quasi in meinem Projekt umgesetzt, das ist aber doof, ordentlicher wäre ja,
das die Komponente selbst die Eigenschaft schon mitbringt.
Ich habe die Eigenschaft mal "smooth" genannt.
Wird ein Wert für smooth größer 0 angegeben, so soll die Eigenschaft ziehen.
So sieht das nun in der Komponente aus:
//dto. wie oben
allerdings am Aufruf haperts:
Antialiasing(Form1.canvas, self.BoundsRect, 1);
denn hier habe ich ja nun keine Form1.
Habe es also so versucht, aber ohne Erfolg:
Antialiasing(self.canvas, self.BoundsRect, 1);
Kann mir jemand sagen, wie ich das in Griff bekomme.
So ein Verzweiflungsversuch habe ich auchschon gestartet:
Antialiasing(Parent.Brush.Create.Bitmap.Canvas, Digilabel.BoundsRect, 1);
Hüüüüüüülfeeee!!!
Edit:
das Problem ist übrigens nicht, dass was abstürzt, oder es eine
Exception gäbe,
nein, es funktioniert halt nicht mit
Antialiasing(self.canvas, self.BoundsRect, 1);