Warum? Was passiert hier?
Hier noch etwas Code:
Code: Alles auswählen
TRGBTripleArray = array[0.. 32767] of TRGBTriple; // sollte für eine Zeile reichen
PRGBTripleArray = ^TRGBTripleArray;
...
var Row1, Row2, RowD: PRGBTripleArray;
... // Src1 ist die obere Linie, Src2 die untere.
IntfImg1 := TLazIntfImage.Create(0, 0);
IntfImg1.LoadFromBitmap(Src1.Handle, Src1.MaskHandle);
IntfImg2 := TLazIntfImage.Create(0, 0);
IntfImg2.LoadFromBitmap(Src2.Handle, Src2.MaskHandle);
IntfImgD := TLazIntfImage.Create(0, 0);
IntfImgD.LoadFromBitmap(Src1.Handle, Src1.MaskHandle);
Alpha := 127;
nAlpha := not Alpha;
for py := 0 to IntfImg1.Height-1 do
begin
Row1 := IntfImg1.GetDataLineStart(py);
Row2 := IntfImg2.GetDataLineStart(py);
RowD := IntfImgD.GetDataLineStart(py); // nur zum Test, es geht auch ohne - dann in Schleife gleich in Row1 oder Row2
for px := 0 to IntfImg1.Width-1 do
begin
RowD^[px].rgbtRed := (Row1^[px].rgbtRed * nAlpha + Row2^[px].rgbtRed * Alpha) shr 8;
RowD^[px].rgbtGreen := (Row1^[px].rgbtGreen * nAlpha + Row2^[px].rgbtGreen * Alpha) shr 8;
RowD^[px].rgbtBlue := (Row1^[px].rgbtBlue * nAlpha + Row2^[px].rgbtBlue * Alpha) shr 8;
end;
end;
IntfImgD.CreateBitmaps(ImgHandle, ImgMaskHandle, false);
TempBitmap := TBitmap.Create;
TempBitmap.Handle := ImgHandle;
TempBitmap.MaskHandle := ImgMaskHandle;
PaintBox.Canvas.Draw(0, 0, TempBitmap);
...
Leider habe ich den Debugger unter MAC-OS nicht zum laufen bekommen. Somit ist es schwer, zur Laufzeit Untersuchungen durchführen zu können.
Viele Grüße
René