Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - von pixel nach pixel scan zu scanline
Darkpara - So 20.08.06 19:26
Titel: von pixel nach pixel scan zu scanline
hallo
ich hab ein problem. ich hab mir ein kleines programm geschrieben das pixel um pixel vergelicht nun hab ich aber bemerkt das diese methode sehr langsam ist und möchte das ganze mit scanline probieren.
ich hab im forum schon einige informationen dazu gefunden checke die ganze sache allerding nicht so ganz. darum post ich mal den code wie er bis jetzt ist, und währ euch sehr dankbar wenn mir wer das ganze abändern kann also mit scanline einbauen. UND AM WICHTIGSTEN bischen erklären was genau da verändert wurde und was es mit den pointern auf sich hat
danke euch!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| for y:= 0 to 240 do begin for x:= 0 to 320 do begin RGB1:=image1.Canvas.Pixels[x,y]; RGBtoHSL (RGB1, H1, S1, L1); matrix[0,x,y,1]:= H1 ; matrix[0,x,y,2]:= S1 ; matrix[0,x,y,3]:= L1 ; end; end; |
PS: ich habs immer noch ned kapiert wie man den code in besserer ansicht schreibt, also die kleinen fenster, dass der code halt wie im delphi editor is^^
Marco D. - So 20.08.06 19:38
Du schreibst den Namen deiner Lieblings-Programmiersprache in [] :mrgreen: Und dann das gleiche nochmal, nur dass du dann vor den Namen ein / setzt. Bsp: [dälphi][/dälphi]. Dann bitte mit e schreiben. :zwinker:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| for y:= 0 to 240 do begin for x:= 0 to 320 do begin RGB1:=image1.Canvas.Pixels[x,y]; RGBtoHSL (RGB1, H1, S1, L1); matrix[0,x,y,1]:= H1 ; matrix[0,x,y,2]:= S1 ; matrix[0,x,y,3]:= L1 ; end; end; |
Außerdem müsstest du mal schreiben was matrix ist, sprich, wie du das deklariert hast.
Scanline arbeitet so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var Line: PRGBQuad; r,g,b: byte; color: TColor; image1.Bitmap.PixelFormat := pf32Bit; for y := 0 to Image1.Bitmap.Height - 1 do begin Line := Image1.Bitmap.ScanLine[y]; for x := 0 to Image1.Bitmap.Width - 1 do begin r := Line.rgbRed; g := Line.rgbGreen; b := Line.rgbBlue; Color := RGB(r,g,b); Inc(Line); end; end; |
Darkpara - So 20.08.06 19:43
ah oki danke :)
zu matrix:
Delphi-Quelltext
1:
| matrix :array[0..30] of array[0..320] of array[0..240] of array[1..3] of double; |
array[0..30] = nummer der matrix, da ich je nach bild die matrix mehrfach berechne (0 sind die original werte)
array[0..320] ist die länge der bilder (achse x)
array[0..240] ist die höhe (achse y)
array[1..3] ist für die 3 verschiedenen werte der farben
Darkpara - So 20.08.06 19:46
was ich leider immer noch ned ganz kapier ist, wo füge ich das hier ein
Delphi-Quelltext
1: 2: 3: 4:
| RGBtoHSL (RGB1, H1, S1, L1); matrix[0,x,y,1]:= H1 ; matrix[0,x,y,2]:= S1 ; matrix[0,x,y,3]:= L1 ; |
also an welche stelle kann ich die 3 werte r,g,b raus nehmen?
Marco D. - So 20.08.06 19:54
Die Funktion RGBtoHSL kennt mein Delphi nicht. Hat das was mit Helligkeit, Sättigung etc. zu tun? Sind zum Vergleichen nicht die reinen RGB-Werte interessanter?
Heider - So 20.08.06 19:55
Hier mal deine Variante mit Scanline
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| type TRGBColor = record R, G, B: byte; end; var pData: ^TRGBColor; bmp: TBitmap; begin bmp := TBitmap.Create; bmp.assign(image1.Picture.Bitmap); for y:= 0 to bmp.Height - 1 do begin pData := bmp.ScanLine[y]; for x:= 0 to bmp.Width -1 do begin RGBtoHSL (pData^, H1, S1, L1); matrix[0,x,y,1]:= H1 ; matrix[0,x,y,2]:= S1 ; matrix[0,x,y,3]:= L1 ; inc(pData); end; end; bmp.Free; end; |
Hoffe das hilft dir!
Darkpara - So 20.08.06 22:32
danke euch hab's glaub verstanden werde es morgen gelich ausprobieren :)
@Marco diese funktion hab ich selbst geschrieben hätte ich dazu geben müssen wies aussieht sorry
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!