Hey, das ging ja schnell!
also bisher sieht es so aus (der wichtigste Ausschnitt der Funktion):
for I := BILDHÖHE - 1 downto 0 do
begin
TmpLine := BITMAP.ScanLine[I];
for J := 0 to BILDBREITE - 1 do
begin
try
TmpRGB := (OLEVARIANT[I,J] or (OLEVARIANT[I,J] shl 8) or (OLEVARIANT[I,J] shl 16));
TmpLine[J * 3 + 2] := TmpRGB;
TmpLine[J * 3 + 1] := TmpRGB;
TmpLine[J * 3] := TmpRGB;
finally
end;
end;
end;
Ja, die Idee mit Scanline hatte ich auch.
das hätte ich dann ungefähr so gelöst:
var TmpLine : PByteArray;
TmpALine: array of Byte;
for I := BILDHÖHE - 1 downto 0 do
begin
TmpLine := BITMAP.ScanLine[I];
TmpALine := OLEVARIANT[I];
Move(TmpALine, TmpLine, ???); <- wobei ich hier nicht genau weiss, was ich eintragen müsste
end;
Aber leider stehen die Einträge der ersten Dimension des Arrays für die Spalten
und die Einträge der zweiten für die Zeilen. Womit sich das auch erledigt hat oder?
Kannst du mir denn mal ein Beispiel für "BitBlt" mit meinem OleVariant geben?