![]() |
Reflektion vom Image
Ich möchte eine Reflektion von einem Image erstellen.
Delphi-Quellcode:
Es scheint das die verwendete Definition falsch ist.
if GDIP_CreateFromHDC(ImgHDC, Graphics) = OK then
begin if GDIP_DrawImageRectI(Graphics, Img, 0, 0, imgW, imgH) = OK then begin GetObject(hbmReturn, sizeof(bm), @bm); pBits := bm.bmBits; GDIP_ImageRotateFlip(img, 6); //Rotate180FlipX GDIP_DrawImageRectI(Graphics, Img, 0, integer(imgH), integer(imgW), integer(imgH)); w := imgW; h := imgH; AlphaStep := 256; UseStep := 128 / (UseImgH - h); // Image Reflektieren for y := 0 to (UseImgH - h) - 1 do begin for x := 0 to (w - 1) do begin Alpha := MAX(pBits[3] - round(AlphaStep), 0); pBits[3] := Alpha; pBits := pBits + 4; end; AlphaStep := AlphaStep - UseStep; end; for y := 0 to (h - 1) do begin for x := 0 to (w - 1) do begin AlphaCoef := (pBits[3] / 255); pBits[2] := pBits[2] div round(AlphaCoef); pBits[1] := pBits[1] div round(AlphaCoef); pBits[0] := pBits[0] div round(AlphaCoef); pBits := pBits + 4; end; end; imgH := UseImgH; Result := hbmReturn; end; GDIP_DeleteGraphics(Graphics); end; pBits: Array of PByte will nicht. pBits: PByte verursacht Zugriffs Verletzung. Weil pBits[2] und die anderen werte immer 0 sind. was läuft falsch. Vielleicht nen Pointer vergessen?
Delphi-Quellcode:
?
pBits := @bm.bmBits;
Aber es sind eigentlich beides Pointer.
Delphi-Quellcode:
AlphaCoef := (pBits[3] / 255);
Ist 0 führt dann natürlich zum AV. gruss |
AW: Reflektion vom Image
Zitat:
Aber mehr als diese 4 Byte oder 8 Byte sind an dieser Adresse eben nicht zu holen. Was du meintest ist sicherlich den Pointer selbst an den anderen Pointer zuzuweisen. Ohne das @-Zeichen. |
AW: Reflektion vom Image
Zitat:
Ich war am überlegen ob da ein Fehler vorliegt. Nur das hilft mir nicht weiter. Kann niemand erkennen ob hier ein Fehler vorliegt? Denn eigentlich müsste
Delphi-Quellcode:
MAX(pBits[3] - round(AlphaStep), 0);
pBits[3] dem wert 128 entsprechen dieser ist aber 0. gruss |
AW: Reflektion vom Image
Delphi-Quellcode:
function MussteHaltNochSinnvollBeiDirEinfügen(hbmReturn: HGDIOBJ): HGDIOBJ;
var pBits: PRGBQuad; // <----- richtigen Datentyp nehmen! // Tipp: http://www.delphipraxis.net/155296-multipletexture-loader.html#post1056155 begin if GDIP_CreateFromHDC(ImgHDC, Graphics) = OK then begin if GDIP_DrawImageRectI(Graphics, Img, 0, 0, imgW, imgH) = OK then begin // sicherheitshalber Initialisieren, schadet ja nicht FillChar(bm, SizeOf(bm), 0); // nur weitermachen wenn Funktion GetObject Erfolg meldet if GetObject(hbmReturn, SizeOf(bm), @bm) <> 0 then begin pBits := bm.bmBits; GDIP_ImageRotateFlip(Img, 6); // Rotate180FlipX GDIP_DrawImageRectI(Graphics, Img, 0, integer(imgH), integer(imgW), integer(imgH)); w := imgW; h := imgH; AlphaStep := 256; UseStep := 128 / (UseImgH - h); // Image Reflektieren for y := 0 to (UseImgH - h) - 1 do begin for x := 0 to (w - 1) do begin Alpha := MAX(pBits.rgbReserved - round(AlphaStep), 0); pBits.rgbReserved := Alpha; Inc(pBits); end; AlphaStep := AlphaStep - UseStep; end; for y := 0 to (h - 1) do begin for x := 0 to (w - 1) do begin AlphaCoef := (pBits.rgbReserved / 255); pBits.rgbBlue := round(pBits.rgbBlue / AlphaCoef); pBits.rgbGreen := round(pBits.rgbGreen / AlphaCoef); pBits.rgbRed := round(pBits.rgbRed / AlphaCoef); Inc(pBits); end; end; imgH := UseImgH; Result := hbmReturn; end; GDIP_DeleteGraphics(Graphics); end; end; end; |
AW: Reflektion vom Image
Boaheh ;) Wuste doch das ich das schon mal gemacht habe.
oops. Habe es einfach vergessen. Werde alt. Danke. gruss |
AW: Reflektion vom Image
So sieht es aus..
Das Problem ist nur ich bekomme mein Window nicht Transparent. Na ja was soll's werde schon noch eine Lösung erarbeiten. Der Papierkorb ändert sich abhängig vom Status voll oder leer. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz