![]() |
Re: WaveFade
Habe noch ein kleines problem
Delphi-Quellcode:
Ich möchte jetzt die RGB werte von der position dx:=256 auslesen
procedure TfrmMain.FadeBackBuffer2;
type TPixelArray = packed array[0..0, 0..255] of packed record b, g, r: Byte; end; PPixelArray = ^TPixelArray; var dx: integer; dy: integer; i: integer; begin try BitBlt(hTempDc, 0, 0, 256, nHeight, DC, 256, 0, SRCCOPY); //' Fade The Data. for dy := 0 to nHeight - 1 do begin for dx := 0 to 255 do begin i := PPixelArray(pAddr)[dy, dx].b - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy, dx].b := i; i := PPixelArray(pAddr)[dy, dx].g - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy, dx].g := i; i := PPixelArray(pAddr)[dy, dx].r - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy, dx].r := i; end; end; //' Blit The Faded Image To The Back Buffer. BitBlt(DC, 0, 0, 256, nHeight, hTempDc, 256, 0, SRCCOPY); except end; end; Das problem ist aber das dx innerhalb des Array an die RGB werte gekoppelt sind also max 255 Jemand eine Idee wie ich das problem beheben kann ? gruss Emil |
Re: WaveFade
da es eh nur 256 Pixel pro Zeile gibt, existiert natürlich keine Spalte für dx=256
aber da gab's ja noch die Möglichkeit ein Eindimensionales Array über das ganze Bild zu legen.
Delphi-Quellcode:
TPixelArray = packed array[0..0] of packed record
b, g, r: Byte; end; PPixelArray(pAddr)[dy * 256 + dx] [add] dein Wunsch würde ja diesem entsprechen
Delphi-Quellcode:
type TPixelArray = packed array[0..0, 0..255] of packed record
PPixelArray(pAddr)[dy + dx div 256, dx mod 256] dx=256 => PPixelArray(pAddr)[dy + 1, 0] dx=300 => PPixelArray(pAddr)[dy + 1, 44] |
Re: WaveFade
Zitat:
Delphi-Quellcode:
BASS_ChannelGetData(stream, @SampleData, 1024);
For intI := 0 To 511 do WaveData[intI] := SampleData[intI];
Delphi-Quellcode:
512 Sample Maximal für Wave mehr stellt die SDK nicht zur verfügung.
TRA: array[1..512] of single;
TIA: array[1..512] of single; Könnte Theoretisch auch 1024 nehmen nur dann wären es 512 für den rechten und 512 für den linken Kanal. gruss Emil |
Re: WaveFade
du hattest aber vorher ein Array mit 768 Bytes pro Zeile
und bei 3 Farben macht das dann 256 Pixel bei 512 wären es natürlich dann 0..511
Delphi-Quellcode:
type TPixelArray = packed array[0..0, 0..511] of packed record
... oder wenn variabel dann:
Delphi-Quellcode:
TPixelArray = packed array[0..0] of packed record
b, g, r: Byte; end; PPixelArray(pAddr)[dy * Spalten + dx] |
Re: WaveFade
Wenn ich dich richtig verstanden habe dann so!
Delphi-Quellcode:
Leider kracht es gewaltig ;)
//' Fade The Data.
for dy := 0 to nHeight - 1 do begin for dx := 0 to 255 do begin i := PPixelArray(pAddr)[dy + dx div 256, dx mod 256].b - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy + dx div 256, dx mod 256].b := i ; i := PPixelArray(pAddr)[dy + dx div 256, dx mod 256].g - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy + dx div 256, dx mod 256].g := i ; i := PPixelArray(pAddr)[dy + dx div 256, dx mod 256].r - 15; if i < 0 then i := 0; PPixelArray(pAddr)[dy + dx div 256, dx mod 256].r := i ; end; end; gruss Emil |
Re: WaveFade
Hmm will irgendwie nicht..
Sehe schon muss noch einiges lernen. :mrgreen: Hat sich erledigt.. gruss EMil |
Re: WaveFade
Kleines Update
Die Flames wurden jetzt der richtigen Bildhöhe angepaßt und die weite auf 512 gesetzt. Hab dann ein Menü addiert und die RadioGroup entfernt. Meine das sieht jetzt besser aus. gruss Emil |
AW: WaveFade
Hat vielleicht jemand von euch den Quelltext noch irgendwo auf seiner Platte oder Archiviert?
Hab meinen verloren. gruss |
AW: WaveFade
Hat sich erledigt habe es neu geschrieben..
Es gibt noch 6 andere Farben.. :) PS: Es wäre nett wenn mal jemand meinen FFT gegenprüfen würde, habe ab und an einen Gleitkomma überlauf. @Michael II ?? :)
Delphi-Quellcode:
Wenn nötig stelle ich dafür den Quelltext des Projekts zur Verfügung.
procedure TBassPlayer.XFFT(FR, FI: array of single; Sign, Sample, SampleCount: Integer);
// Wave Daten glätten var Q, J, M, L, le, le1, ip: integer; tr, ti, s, ur, ur1, ui, wr, wi: single; begin J := 1; for Q := Sample to SampleCount do begin if Q < J then begin s := FR[Q]; FR[Q] := FR[J]; FR[J] := s; s := FI[Q]; FI[Q] := FI[J]; FI[J] := s; end; M := ((SampleCount + 1) div 2); while M < J do begin J := J - M; M := M div 2; end; J := J + M; end; for L := 1 to 8 do begin le := trunc(Power(2, L)); le1 := le div 2; ur := 1; ui := 0; wr := Cos(PI / le1); wi := Sign * Sin(PI / le1); for J := 1 to le1 do begin Q := J; while Q <= (SampleCount + 1) do begin ip := Q + le1; tr := FR[ip] * ur - FI[ip] * ui; ti := FR[ip] * ui + FI[ip] * ur; FR[ip] := FR[Q] - tr; FI[ip] := FI[Q] - ti; FR[Q] := FR[Q] + tr; FI[Q] := FI[Q] + ti; Q := Q + le; end; ur1 := ur * wr - ui * wi; ui := ur * wi + ui * wr; ur := ur1; end; end; for Q := Sample to (SampleCount + 1) do begin FR[Q] := FR[Q] * DivN; FI[Q] := FI[Q] * DivN; end; end; gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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