Autor |
Beitrag |
Darkpara
      
Beiträge: 61
Win XP
|
Verfasst: So 20.08.06 19:26
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^^
Zuletzt bearbeitet von Darkpara am So 20.08.06 19:40, insgesamt 1-mal bearbeitet
|
|
Marco D.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: So 20.08.06 19:38
Du schreibst den Namen deiner Lieblings-Programmiersprache in []  Und dann das gleiche nochmal, nur dass du dann vor den Namen ein / setzt. Bsp: [dälphi][/dälphi]. Dann bitte mit e schreiben.
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; |
_________________ Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
|
|
Darkpara 
      
Beiträge: 61
Win XP
|
Verfasst: 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 
      
Beiträge: 61
Win XP
|
Verfasst: 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.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: 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?
_________________ Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
|
|
Heider
Hält's aus hier
Beiträge: 11
WinXP Prof. SP2
Delphi 7, Vis. C++ 6
|
Verfasst: 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!
_________________ "Zwei Dinge sind undendlich, das Universum und die Menschliche Dummheit, obwohl ich mir beim Universum nicht sicher bin." Albert Einstein
|
|
Darkpara 
      
Beiträge: 61
Win XP
|
Verfasst: 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
|
|
|