Ach ja: Das GDIP_BitmapUnlockBits solltest du erst aufrufen nachdem du mit den Änderungen am Bild fertig bist.
Hatte das vorher mal versucht danach hatte er nicht mehr gerendert..
Aber du hast recht habe es geändert so funktioniert es.
So gehts.
Delphi-Quellcode:
case FEffect of
0:
begin
d := round(FFade * 255);
if GDIP_BitmapLockBits(imgSpectrum, nil, ImageLockModeRead or ImageLockModeWrite,
PixelFormat32bppARGB, @BitmapData) = OK then
begin
for Row := 0 to BitmapData.Height - 1 do
begin
RGBQuad := Scanline(BitmapData, Row);
for Col := 0 to BitmapData.Width - 1 do
begin
Pixel := RGBQuad^;
alpha := Pixel.rgbReserved;
if alpha >= d then
Pixel.rgbReserved := alpha - d
else
Pixel.rgbReserved := 0;
RGBQuad^ := Pixel;
inc(RGBQuad);
end;
end;
GDIP_BitmapUnlockBits(imgSpectrum, @BitmapData);
end;
end;
Das mit dem Array war einfach nichts.
Ich habe versucht aus einen Leeren Bitmap Alpha werte zu extrahieren die nicht vorhanden waren. Wie soll das auch gehen bei einem leeren Array.
Irgendwo wurde das in VB initialisiert aber der Punkt ist nicht auszumachen.
Aber ich denke es geht auch so.
gruss