Autor Beitrag
Darkpara
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: 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!
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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;
    //Zeile für Zeile durchgehen
    for y := 0 to Image1.Bitmap.Height - 1 do
    begin
      // Reihe y komplett einlesen, wir sind nun in Spalte 1 (x = 0)
      Line := Image1.Bitmap.ScanLine[y];
      //Die ganze Zeile Pixel für Pixel durchgehen
      for x := 0 to Image1.Bitmap.Width - 1 do
      begin
        //die RGB-Werte auslesen und in TColor umwandeln
        // Farbwert für diesen Pixel setzen
        r := Line.rgbRed;
        g := Line.rgbGreen;
        b := Line.rgbBlue;
        Color := RGB(r,g,b);   
        //den Pointer erhöhen und somit zum nächsten Pixel gehen    
        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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: So 20.08.06 19:43 
ah oki danke :)

zu matrix:
ausblenden Delphi-Quelltext
1:
matrix :array[0..30of array[0..320of array[0..240of array[1..3of 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: So 20.08.06 19:46 
was ich leider immer noch ned ganz kapier ist, wo füge ich das hier ein

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: 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
BeitragVerfasst: So 20.08.06 19:55 
Hier mal deine Variante mit Scanline
ausblenden 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 //einfacher Vektor mit den drei Farbwerten
    R,
    G,
    B: byte;
  end;
var
  pData: ^TRGBColor; //Zeiger auf einen Vektor mit Farbwerten
  bmp: TBitmap;
begin
    bmp := TBitmap.Create;
    bmp.assign(image1.Picture.Bitmap);
    for y:= 0 to bmp.Height - 1 do begin
      pData := bmp.ScanLine[y]; //zuweisen der Adresse des ersten Bildpunktes der y-ten Zeile 
      for x:= 0 to bmp.Width -1 do begin
         RGBtoHSL (pData^, H1, S1, L1); //ich nehm mal an RGBtoHSL verlangt einen Vektor mit RGBFarbwerten,
// deswegen wird pData dereferenziert, ansonsten kanns du auch auf die einzelnen Farben
// zugreifen mit pData^.R, pData^.G und pData^.B
         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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: 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