Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Pixel zeilenweise durchnummerieren ohne scanline (https://www.delphipraxis.net/172823-pixel-zeilenweise-durchnummerieren-ohne-scanline.html)

mabstudent 24. Jan 2013 10:35

Delphi-Version: 5

Pixel zeilenweise durchnummerieren ohne scanline
 
Ich habe ein 100*100 Image, dessen 10.000 Pixel nach folgendem Schema durchnummeriert werden sollen:

(x,y):pixelnummer

(1,1):1
(2,1):2
(3,1):3
...
(100,1):100 //Ende der ersten Zeile
(1,2):101
(2,2):102
(3,2):103
...
//letzte Zeile:
(1,100):9901
...
(99,100):9999
(100,100):10000

Ich kenne, bzw. darf nur mit image1.canvas.pixels[x,y] die Aufgabe lösen und habe keine Ahnung wie. In der Suche habe ich viele Lösungen mithile Scanlines(..) gesehen, das darf ich leider nicht verwenden.
Bin für jeden Tipp dankbar!

Popov 24. Jan 2013 10:47

AW: Pixel zeilenweise durchnummerieren ohne scanline
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  x, y, k: Integer;
begin
  with Image1.Picture.Bitmap do
  begin
    Width := 100 - 1;
    Height := 100 - 1;
    k := 0;

    for y := 0 to Width do
      for x := 0 to Width do
      begin
        Inc(k);
        Canvas.Pixels[x, y] := k;
      end;

    ShowMessage(IntToStr(k));
  end;
end;
Und besser in der Schule aufpassen.

Medium 24. Jan 2013 10:49

AW: Pixel zeilenweise durchnummerieren ohne scanline
 
Du hast sie doch schon soeben durchnummeriert, sogar ganz ohne Delphi!

Bummi 24. Jan 2013 11:48

AW: Pixel zeilenweise durchnummerieren ohne scanline
 
oder geht es um die hin und her Rechnerei?

Delphi-Quellcode:
procedure TForm1.SetPoint(index:Integer);
begin
   Image1.Canvas.Pixels[index div 100,index mod 100] := clBlack;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i:Integer;
begin
  for I := 0 to 99 do SetPoint(100 * i + i);
  for I := 0 to 99 do SetPoint(100 * i + 99 - i);
end;

terence14 24. Jan 2013 12:15

AW: Pixel zeilenweise durchnummerieren ohne scanline
 
Dein Bild hat eine Breite von 100. xMax=100;
Und eine Höhe von 100. yMax=100;

Delphi-Quellcode:

xMin:=1; xMax:=100;
yMin:=1; yMax:=100;
EinerStelle:=x mod 10;
ZehnerStelle:=x div 10;
if (y > yMin) then
   ZehnerStelle:=ZehnerStelle + (y - yMin) * xMax;
Nummer:=(ZehnerStelle * 10) + EinerStelle;
Der Wert in Nummer ergibt die durchnummerierte Zahl.

MfG,
terence

Codehunter 24. Jan 2013 15:19

AW: Pixel zeilenweise durchnummerieren ohne scanline
 
:wiejetzt:

Also ich lese die Frage nun schon mehrere Male durch und verstehe nach wie vor das Problem nicht. "Pixel numerieren". Soll da über einen eindimensionalen Index auf die zweidimensionale Pixelmatrix zugegriffen werden? Quasi 100 Zeilen horizontal aneinander gehängt?

Popov 24. Jan 2013 22:37

AW: Pixel zeilenweise durchnummerieren ohne scanline
 
@Codehunter

Ich denke die Aufgabe ist so einfach wie sie sich liest und sollte erst gar nicht interpretiert werden. Es ist wahrscheinlich eine Schulaufgabe. Also erst gar nicht anfangen da einen Hacken zu suchen mit der Begründung, dass es ja nicht so einfach sein kann.

Codehunter 25. Jan 2013 07:23

AW: Pixel zeilenweise durchnummerieren ohne scanline
 
Könnte damit zu tun haben, dass wir in der Schule keinen nennenswerten IT-Unterricht hatten und mir daher allzu einfache Aufgaben per se suspekt erscheinen ;-)

Mein erstes Hello-World-Programm schrieb ich erst in der Ausbildung und zwar in Assembler auf einem 8088-Prozessor. Vorher hatte ich schon die Lagerverwaltung aus dem AmigaBASIC-Handbuch um eine grafische Oberfläche erweitert...

mabstudent 25. Jan 2013 13:00

AW: Pixel zeilenweise durchnummerieren ohne scanline
 
Habe da auch viel zu kompliziert gedacht, also es war schlichtweg das gemeint:

Code:
[..]

      for y := 1 to 100 do
        for x := 1 to 100 do
        begin
          Inc(k);
        end;
Ich brauchte die Nummerieung, um jedes "Primzahlpixel" des 100*100 Image rot zu machen, alle anderen gelb.
Es mussten also die Primzahlen von 1..10.000 gesucht werden.
Hab nicht gecheckt das das einfach inc(k) entspricht, weil ich nicht wusste wie die Schleife in der Schleife arbeitet.
Wird erst Schleife 1 komplett durchlaufen dann Schleife 2, oder einmal Schleife 1, einmal Schleife 2?

Klaus01 25. Jan 2013 13:07

AW: Pixel zeilenweise durchnummerieren ohne scanline
 
Die äussere Schleife fängt bei Wert y= 1,
Dann wird die innere Schleife gestartet und diese läuft von x=1 bis X=100.
Ist die innere Schleife beendet wird die äussere Schleife um eins hochgezählt
und dann wird die innerer Schleife wieder bearbeitet.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz