Entwickler-Ecke

Multimedia / Grafik - Scanline


JayEff - Di 11.10.05 19:57
Titel: Scanline
Hi Leute

Mein erster Code 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:
Procedure TForm1.ChangeImage(bit: TBitmap; Value: Integer);
Type
    ByteArray = Array[1..3Of Byte;
Var
    h, w: Integer;
    p: ^ByteArray;
    i:integer;
Begin
bit.PixelFormat:= pf24Bit;
i:=0;
    For h := 0 to bit.Height-1 Do
    Begin
        p := bit.ScanLine[h];
        For w := 0 To bit.Width-1 Do
        Begin
            //If p^[1] + p^[2] + p^[3] > Value Then
            Begin
            inc(i);
                p^[1] := 255;
                p^[2] := 0;
                p^[3] := 0;
            End;
        End;
    End;
Label2.Caption:=IntToStr(i);
End;

Es hat keinen wirklichen sinn, ich dachte eigentlich bloß, teile des Images blau zu färben. Als NICHTS geschah hab ich mal die If-Abfrage auskommentiert. Weiterhin NICHTS.
Ausgelößt wird das ganze so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Procedure TForm1.ScrollBar1Change(Sender: TObject);//Fragt nicht warum ich ne ScrollBar genommen hab oO
Begin
  Label1.Caption := IntToStr(ScrollBar1.Position);
  Image1.Picture.Bitmap.LoadFromFile(open.Filename);//TOpenPictureDialog.
  ChangeImage(Image1.Picture.Bitmap,Scrollbar1.Position);
  Image1.Refresh;
End;

Was hab ich denn nun schon wieder falsch gemacht X_x


Narses - Di 11.10.05 20:15

Moin!

Guck dir doch mal diesen Fred hier [http://www.delphi-forum.de/viewtopic.php?t=44140&highlight=scanline] an, das sollte dir weiter helfen. :wink:

user profile iconLossy eX hat den passenden Code und user profile iconjornbyte den korrekten Algo für den Grauwert. Wenn du blau färben willst, dann setzt du nur den Grauwert für blau, fertig.

cu
Narses


JayEff - Mi 12.10.05 14:21

ACH VERDAMMT.
Kann mir nicht einfach jemand sagen, dass ich vergessen hab, den Pointer zu erhöhen? ^^ mal schaun obs jetzt klappt.
rofl hier ist es:

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:
27:
Procedure TForm1.ChangeImage(bit: TBitmap; Value: Integer);
Type
    ByteArray = Array[1..3Of Byte;
Var
    h, w: Integer;
    p: ^ByteArray;
    i:integer;
Begin
bit.PixelFormat:= pf24Bit;
i:=0;
    For h := 0 to bit.Height-1 Do
    Begin
        p := bit.ScanLine[h];
        For w := 0 To bit.Width-1 Do
        Begin
            If p^[1] + p^[2] + p^[3] > Value Then
            Begin
            inc(i);
                p^[1] := 255;
                p^[2] := 255;
                p^[3] := 255;
            End;
            inc(p); 
        End;
    End;
Label2.Caption:=IntToStr(i);
End;


Damit hat sichs erledigt ^^ ganz lustiger effekt übrigens.