Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   bild zerschneiden (https://www.delphipraxis.net/150891-bild-zerschneiden.html)

xxsasch4xx 29. Apr 2010 17:15


bild zerschneiden
 
hallo will ein bild ein 16 einzelteile schneiden und abspeichern auf der festplatte

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Quelle, Ziel: TBitmap;
    X, Y: integer;
begin
  Quelle := TBitmap.Create;
  try
    Ziel := TBitmap.Create;
    try
      Quelle.LoadFromFile('beispielbild.bmp');
      Ziel.Width := Quelle.Width div 4;
      Ziel.Height := Quelle.Height div 4;

      X := 0;
      Y := 0;

      Ziel.Canvas.CopyRect(Rect(0,0,Ziel.Width,Ziel.Height),
                           Quelle.Canvas,
                           Rect(X,Y,X + Ziel.Width, Y + Ziel.Height));
      Ziel.SaveToFile('teilstück1.bmp');

      inc(X,Ziel.Width);

      Ziel.Canvas.CopyRect(Rect(0,0,Ziel.Width,Ziel.Height),
                           Quelle.Canvas,
                           Rect(X,Y,X + Ziel.Width, Y + Ziel.Height));
      Ziel.SaveToFile('teilstück2.bmp');

      inc(X,Ziel.Width);

      Ziel.Canvas.CopyRect(Rect(0,0,Ziel.Width,Ziel.Height),
                           Quelle.Canvas,
                           Rect(X,Y,X + Ziel.Width, Y + Ziel.Height));
      Ziel.SaveToFile('teilstück3.bmp');

      inc(X,Ziel.Width);

      Ziel.Canvas.CopyRect(Rect(0,0,Ziel.Width,Ziel.Height),
                           Quelle.Canvas,
                           Rect(X,Y,X + Ziel.Width, Y + Ziel.Height));
      Ziel.SaveToFile('teilstück4.bmp');
    finally
      Ziel.Free;
    end;
  finally
    Quelle.Free;
  end;
end;
dies ist die erste zeile für die ersten 4 pics oben !
ich will es vieleicht in einer schleife durchlaufen lassen dass er die bilder in 16 teile zerschneidet funktioniert aber irgentwie noch nicht richtig wenn ich Y variable um 50 erhöhe und X wieder auf null stell

kann mir vieleicht einer helfen?

DeddyH 29. Apr 2010 17:18

Re: bild zerschneiden
 
Wieso um 50 erhöhen? Wenn, dann ja wohl um Ziel.Height, oder?

xxsasch4xx 29. Apr 2010 17:21

Re: bild zerschneiden
 
ja genau das alles runterrutscht um 50 dass ich die anderen bilder abspeichern kann
also die zweite zeile halt

DeddyH 29. Apr 2010 17:22

Re: bild zerschneiden
 
Sry, ich versteht gerade nicht, wo Dein Problem liegt. Kriegst Du die Schleife nicht hin? Wie sieht Dein Versuch denn aus?

xxsasch4xx 29. Apr 2010 17:28

Re: bild zerschneiden
 
der quelltext oben ist ja für die erste zeile die bilder
und mein großes bild soll in 4 mal 4 bilder aufgeteilt werden
ich will irgentwie die höhe ändern dass ich nicht mehr von ganz die bildstücke bekomme
sondern von der zweiten zeile

Delphi-Quellcode:
      x:=0;
y:=50;
      Ziel.Canvas.CopyRect(Rect(0,0,Ziel.Width,Ziel.Height),
                           Quelle.Canvas,
                           Rect(X,Y,X + Ziel.Width, Y + Ziel.Height));
      Ziel.SaveToFile('teilstück5.bmp');
ich habs mit teilstück5 so versucht aber das sind irgentwie nicht die richtigen koordinaten

DeddyH 29. Apr 2010 17:29

Re: bild zerschneiden
 
Wie kommst Du auf 50? Hier machst Du es richtig:
Zitat:

Delphi-Quellcode:
inc(X,Ziel.Width);

Dann mach das Gleiche doch auch für die Y-Koordinate.

xxsasch4xx 29. Apr 2010 17:33

Re: bild zerschneiden
 
Delphi-Quellcode:
x:=0;
      inc(Y,Ziel.width);
      Ziel.Canvas.CopyRect(Rect(0,50,Ziel.Width,Ziel.Height),
                           Quelle.Canvas,
                           Rect(X,Y,X + Ziel.Width, Y + Ziel.Height));
      Ziel.SaveToFile('teilstück5.bmp');
meinst du so?
oder muss ich bei

Delphi-Quellcode:
inc(Y,Ziel.Height)
hinschreiben und nicht witdh?

DeddyH 29. Apr 2010 17:49

Re: bild zerschneiden
 
Die Begriffe X- und Y-Koordinate sind Dir ein Begriff, oder? X steht für horizontal, Y für vertikal, also muss es Height heißen.

xxsasch4xx 29. Apr 2010 18:37

Re: bild zerschneiden
 
ja hab ich ja gemacht aber bei mir kommt da mist raus
also kein syntax fehler sondern falsche koordinaten irgentwie

Aphton 29. Apr 2010 19:18

Re: bild zerschneiden
 
Ich bin dann mal so böse und verdirb dir den Spaß:
Delphi-Quellcode:
procedure BmpSplitup16( bmp: TBitmap; Filename: String );
var
  x, y   : Integer;
  tile   : TBitmap;
  dX, dY : Integer;
begin
  tile := TBitmap.Create;
  dX := bmp.Width div 4;
  dY := bmp.Height div 4;
  tile.Width := dX;
  tile.Height := dY;
  try
    for y := 0 to 3 do
      for x := 0 to 3 do
      begin
        BitBlt( tile.Canvas.Handle, 0, 0, dX, dY,
          bmp.Canvas.Handle, x*dX, y*dY,
          SRCCOPY );
        tile.SaveToFile( Filename + IntToStr(y*4+x+1) + '.bmp' );
      end;
  finally
    tile.Free;
  end;
end;

//Anwendung:
var
  bmp: Tbitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.LoadFromFile(  '-DEINE_QUELLE-' );
    BmpSplitup16( bmp, 'Test' );
  finally
    bmp.Free;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 Uhr.

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