Entwickler-Ecke
Multimedia / Grafik - ich raff den befehl einfach nicht : "scanline"
Delphianer23 - Fr 21.02.03 20:21
Titel: ich raff den befehl einfach nicht : "scanline"
Hab schon gesucht, aber die Themen haben mir nicht
weitergeholfen.
Es soll
Ich berechne jeden Pixel einzel.
Wie soll ich ihn dann ausgeben mit scanline?
So (sehr sehr) vereinfacht sieht mein code mit pixel[] aus
y:=-1;
repeat
inc(y);
x:=-1;
repeat
inc(x);
//Rechnung für Farbe //rechnefarbe(x,y)
Bitmap1.canvas.pixel[x,y]:=RGB(//Berechnete Werte//)
until x = 200;
until y = 200;
Wie mach ich den code mit scanline?
Aya - Fr 21.02.03 20:35
Hi,
das is dahier hab ich zum testen benutzt was schneller ist... (siehe anderes Topic im Freeware Bereich):
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.BitBtn1Click(Sender: TObject); var x, y: Integer; bit: TBitmap; P: PByteArray; begin Bit:=TBitmap.Create; Bit.PixelFormat:=pf24Bit; Bit.Width:=Image.Width; Bit.Height:=Image.Height; for y:=0 to Bit.Height-1 do begin P:=Bit.ScanLine[y]; for x:=0 to Bit.Width-1 do begin P^[x*3]:=255; // Blau P^[x*3+1]:=0; // Rot P^[x*3+2]:=0; // Grün end; end; Image.Canvas.Draw(0,0,Bit); Bit.Free; end; |
in P wird die Scanline für jede Horrizontale Linie des Bitmaps gespeichert, in der 2ten For-Schleife wird dann jedem einzelnen Wert in diesem Array ein wert zugewiesen.
x*3 daher, weil es ja 3 Werte sind, R, G und B... :)
Hoffe das hat dir geholfen.
Au'revoir,
Aya
Delphianer23 - Fr 21.02.03 21:15
Danke habs verstanden, nur sieht das Bild von den Farben her
ganz anders aus.
Ich hab auch drauf geachtet dass wirklich rot bei rot ist usw.
Aber es sieht trotzdem ganz anders aus.
Was könnte es noch sein?
Sie die irgendwie noch anders defieniert?
Aya - Fr 21.02.03 21:28
Mhh.. ne, so wie in meinem beispiel stimmt es schon.. du hast wahrscheinlich irgendwie die farben verdreht.. *g*
Denk dran, $00FF0000 in Delphi ist nicht Rot, sondern Blau!
OregonGhost - Sa 22.02.03 12:54
| Aya hat folgendes geschrieben: |
P^[x*3]:=255; // Blau
P^[x*3+1]:=0; // Rot
P^[x*3+2]:=0; // Grün
|
Bist du sicher? Wenn ich mich recht erinnere, ist die Reihenfolge in Win32-DIBs BGR und nicht BRG.
Aber das nur mal so als Ergänzung.
Aya - Sa 22.02.03 16:37
arg ups... klar.. BGR... sorry :oops:
War ich wohl mit gedanken ein wenig durcheinander als ich das geschrieben habe..
maximus - Sa 22.02.03 17:58
Hi, ihr scanner.
Was auch noch wichtig wär, ist 'PixelFormat' damit man überhaupt auf das aktuelle Farb-format reagieren kann. Bei 32 bit liegen die daten in BGRX order und bei 24 bit in BGR, wie ihr schon sagtet :)
bis denn. mx
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!