![]() |
AW: Circular spectrum visualizer
Nehme ich DWord dann habe ich hier
Delphi-Quellcode:
SpectrumData2D[x, y] := LongWord(c or ((a - 256) * $1000000))
einen Integerüberlauf. Und schon sind wir wieder beim Thema das es nicht funktioniert. PS: Als Byte definiert habe ich Daten im Array. Ob sie richtig sind? Keine Ahnung. Ich sagte ja schon bekomme das nicht gebacken. gruss |
AW: Circular spectrum visualizer
Zitat:
Bei deinem obigen Problem: a-256 kann - wenn du a als BYTE definiert - problematisch sein, wenn a=0. Mein Tipp: Mische nicht BYTEs und WORDs und DWORDs. Nimm DWORD; dann wird der Code übersichtlicher, lesbarer und tut dann auch eher das, was du erwartest ;-). |
AW: Circular spectrum visualizer
Zitat:
gruss |
AW: Circular spectrum visualizer
Meine einfache Lösung..
Delphi-Quellcode:
Wie man sich vorstellen kann ist Get\SetPixel nicht die allerbeste Methode weil zu langsam und geht extrem auf die CPU.
case FEffect of
0: begin d := round(FFade * 255); for y := 0 to 239 do begin for x := 0 to 239 do begin GDIP_BitmapGetPixel(imgSpectrum, x, y, Color); SKAERO_SplitColorARGB(Color, _a, _r, _g, _b); a := _a; if a >= d then a := a - d else a := 0; c := Color and $ffffff; GDIP_BitmapSetPixel(imgSpectrum, x, y, (a shl 24) or c); end; end; end; Also neue Methode.
Delphi-Quellcode:
GDIP_BitmapGetPixel ist Vergangenheit..
case FEffect of
0: begin d := round(FFade * 255); if GDIP_BitmapLockBits(imgSpectrum, nil, ImageLockModeRead or ImageLockModeWrite, PixelFormat32bppARGB, @BitmapData) = OK then begin GDIP_BitmapUnlockBits(imgSpectrum, @BitmapData); 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 alpha := alpha - d else alpha := 0; Color := Byte(@Pixel) and $ffffff; GDIP_BitmapSetPixel(imgSpectrum, Col, Row, (alpha shl 24) or Color); inc(RGBQuad); end; end; end; GDIP_BitmapSetPixel aber leider nicht da ich nicht weis wie ich die gesamt Farbe des Pixel an das Bitmap übergeben soll. Wo ist mein Denkfehler, oder was verstehe ich nicht. gruss |
AW: Circular spectrum visualizer
Was soll
Delphi-Quellcode:
genau bewirken?
//
Color := Byte(@Pixel) and $ffffff; Zum einen tut ein "and $ffffff" rein gar nichts mit einem Byte und zum anderen castest du die (Adresse des (Pointers auf den Pixel)) auf ein Byte. Das hat ziemlich wenig mit irgendeiner Farbe zu tun. Da hast du nur die untersten 8-Bit von irgendeiner Stackadresse. |
AW: Circular spectrum visualizer
Zitat:
Wenn das Pixel keinen Alpha wert hat soll das Pixel den Wert 0 erhalten also schwarz. So verstehe ich das.
Delphi-Quellcode:
(alpha shl 24) or Color
PS: Dann die Berichtigung..
Delphi-Quellcode:
gruss
Color := DWORD(@Pixel) and $FFFFFF;
GDIP_BitmapSetPixel(imgSpectrum, Col, Row, (alpha shl 24) or Color); |
AW: Circular spectrum visualizer
Ah jetzt verstehe ich was du machen willst.
Mach es einfach so:
Delphi-Quellcode:
if alpha >= d then
Pixel.rgbReserved := alpha - d else Pixel.rgbReserved := 0; GDIP_BitmapSetPixel(imgSpectrum, Col, Row, DWORD(Pixel)); |
AW: Circular spectrum visualizer
Zitat:
Aber mein Problem ist ich möchte BitmapSetPixel nicht mehr verwenden darum geht es denn sonst macht die Funktion eigentlich keinen sinn. Diese soll ja get\set ersetzen. Mit Get\Set habe 30% CPU Auslastung das gilt zu minimieren weil Get oder SetPixel zu lastig sind. gruss |
AW: Circular spectrum visualizer
Delphi-Quellcode:
statt
RGBQuad^ := Pixel
Delphi-Quellcode:
:
GDIP_BitmapSetPixel
Delphi-Quellcode:
Theoretisch geht auch einfach:
if alpha >= d then
Pixel.rgbReserved := alpha - d else Pixel.rgbReserved := 0; RGBQuad^ := Pixel;
Delphi-Quellcode:
for Col := 0 to BitmapData.Width - 1 do
begin alpha := RGBQuad^.rgbReserved; if alpha >= d then RGBQuad^.rgbReserved := alpha - d else RGBQuad^.rgbReserved := 0; inc(RGBQuad); end; |
AW: Circular spectrum visualizer
Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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 by Thomas Breitkreuz