Autor Beitrag
farmerbob
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mo 08.12.08 16:05 
Hallo , ich bräuchte mal kurz eure Hilfe. Ich versuche gerade ein Programm zu schreiben , das ein vorgegebenes Bild in mehrere Rechtecke schneidet
( bzw. ist es eher nur ein Teil des Programms , denn ich will ein Puzzle programmieren und dazu brauche ich das erstmal)

Also ich hab mir das ganze so vorgestellt , ich lade das bild über zb. die Image Komponente in mein Programm,
dann lasse ich das Bild in mehrere Rechtecke zerschneiden:
der Befehl dazu müsste Image1.Canvas.CopyRect oder irre ich mich da?

Das ganze muss ich dann irgentwie über eine Schleife laufen lassen ( schleifendruchläufe könnten dann zb. die Anzahl der gewünschten Rechtecke sein).

Ist meine Überlegung bis dahin stimmig?

Naja jetzt würde ich jedes einzelne Rechteck in einzelne Rechteck in eines neues Imagae laden lassen ( welches sich idealerweise selbst erstellt) , die Idee mit den einzelnen Images hab ich , weil ich das ganze ja für ein Puzzle benutzen will , und ich denke , dass ist dann einfacher die einzelnen Puzzleteile zu verschieden , oder was meint ihr?

Die einzelnen Teile müsste ich dann mit randomize noch vermischen wenn ich das geschafft habe.

Meint ihr ich kann diese Überlegung umsetzen , oder hab ich noch Denkfehler drin?

So bin offen für Kritik , Verbesserungsvorschläge und Hilfen.
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Di 09.12.08 07:05 
Du kannst zum Speichern des Ausgangsbildes z.B. eine Bitmap verwenden. Zum Bleistift kannst Du das Bild mit Loadfromfile in ein vorher erzeugtes Bitmap-Objekt (TBitmap) laden.
Um das Bild in mehrere Teile zu zerschneiden kannst Du z.B. BitBlt verwenden:

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:
27:
var
  ausgangsbild:TBitmap;
  puzzle:array of array of TBitmap;

  ...

ausgangsbild:=TBitmap.Create;
try
  ausgangsbild.LoadfromFile('c:\hallo\hier\bitmap.bmp');
  xgroesse := ausgangsbild.Width div 5;
  ygroesse := ausgangsbild.Height div 5;
  if (xgroesse > 0and (ygroesse > 0then begin
    setlength(puzzle,5,5);
    //Initialisieren und Puzzleteil auslesen:
    for y := 0 to 4 do
      for x := 0 to 4 do begin
        puzzle[y,x] := TBitmap.Create;
        with puzzle[y,x] do begin
          SetSize(xgroesse,ygroesse);
          BitBlt(Canvas.Handle,0,0,xgroesse,ygroesse,ausgangsbild.Canvas.Handle,
            x*xgroesse,y*ygroesse,SRCCOPY);
        end;
      end;
  end
finally
  ausgangsbild.Free;
end;

Ist nicht getestet, da aus dem Gedächtnis programmiert.
Um den Anzeige- und Verschiebealgorithmus musst Du Dich selbst kümmern (z.B. Zeichnen der Bitmaps auf eine Paintbox, reagieren auf die Mausevents etc.)

_________________
Es gibt keine Probleme - nur Lösungen!