Entwickler-Ecke

Multimedia / Grafik - Scanline will nicht so wie ich will


>M@steR< - So 12.10.08 14:43
Titel: Scanline will nicht so wie ich will
Gelöscht


platzwart - So 12.10.08 15:14

hi,

nimm lieber ein TBitMap32 oder TImage32 aus der Graphics32. Da dürfte die Geschwindigkeit um Faktor 200 steigen. Dann brauchst du auch nicht mehr mit den einzelnen Farbwerten herumzuhantieren...


>M@steR< - So 12.10.08 15:19

Gelöscht


Boldar - So 12.10.08 15:20

Du sollst ja auch eine ganz andere Komponente nehmen!


>M@steR< - So 12.10.08 15:24

Gelöscht


>M@steR< - So 12.10.08 15:36

Gelöscht


uall@ogc - So 12.10.08 16:25

pf24bit für RGB (was du hast)
bzw. pf32bit fpr RGBA


platzwart - So 12.10.08 17:45

user profile iconplatzwart hat folgendes geschrieben Zum zitierten Posting springen:
hi,

nimm lieber ein TBitMap32 oder TImage32 aus der Graphics32. Da dürfte die Geschwindigkeit um Faktor 200 steigen. Dann brauchst du auch nicht mehr mit den einzelnen Farbwerten herumzuhantieren...




welche komponenten habe ich denn da angesprochen? -> "TBitMap32 oder TImage32 aus der Graphics32"^^


http://graphics32.org/wiki/


>M@steR< - So 12.10.08 19:37

Gelöscht


>M@steR< - So 12.10.08 21:46

Gelöscht


platzwart - So 12.10.08 22:16


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
  var x,y:integer;
      line: PColor32Array;
  begin
    for y := 0 to image321.Height -1 do
      begin
        line := image321.Bitmap.scanline[y];
        for x := 0 to image321.Width -1 do
          begin
            if line^[x] = clWhite then 
            if line[x] = clWhite then
              begin
                showmessage('Weiß');
              end;
          end;
      end;
  end;


>M@steR< - So 12.10.08 22:19

Gelöscht


platzwart - So 12.10.08 22:45

kam die zugriffsverletzung in der zeile, die ich markiert hatte? und hast du die markierte gelöscht?


>M@steR< - So 12.10.08 22:47

Gelöscht


platzwart - Mo 13.10.08 00:40

*kristallkugel auspack und reinschau*

... hast ja net vergessen, in die bitmap auch ein bild zu laden? ^^

ansonsten greift er auf eine leere bitmap zu und natürlich gibts dann eine fehlermeldung ;)


Hidden - Mo 13.10.08 01:03

Hi,

Ich würde dir empfehlen, ein paar überflüssige Einrückungen wegzulassen. Mag ein bisschen komisch klingen, aber gibt dir wirklich viel an Übersichtlichkeit ;)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var
  x, y: Integer;
  Line: PColor32Array;
begin
  for y := 0 to image321.Height -1 do begin
    Line := Image321.Bitmap.Scanline[y];
    for x := 0 to Image321.Width -1 do begin
      if Line[x] = clWhite then
        ShowMessage('Weiß');
    end;
  end;
end;


Also 'ne leere Bitmap kann's nicht sein. Wenn er vergessen hätte, sie zu erzeugen, käme die Zugriffsverletzung früher(bei mir jetzt Zeile 6). Und bei Height = 0 würde die for-Schleife null mal ausgeführt..

mfG,


>M@steR< - Mo 13.10.08 01:14

Gelöscht