Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Images zusammenfügen (https://www.delphipraxis.net/57374-images-zusammenfuegen.html)

100nF 20. Nov 2005 10:32


Images zusammenfügen
 
Hallo zusammen,

ich möchte mehrere images zusammenfügen.
ich habe 4 images: ImageLeft, ImageMitte, ImageRight und Image2.

das ziel ist, dass aus den 3 images ImageLeft, ImageMitte, ImageRight ein image wird, das dann in image2 zu sehen ist.
am anfang (ganz links) vom image2 muss sich ImageLinks befinden. dann kommt mehrmals (ca. 10 mal) imageMitte und am schluss noch einmal ImageRechts.

ich habs mal so probiert:
Delphi-Quellcode:
for a:=0 to 10 do
begin
  image2.picture.assign(imageLeft.picture.bitmap);
  image2.picture.Bitmap.Canvas.CopyRect(rect(imageLeft.Picture.width, 0, imageMitte.picture.Width +
  imageLeft.picture.width, imageMitte.picture.height), imageMitte.picture.bitmap.Canvas, rect(0, 0,
  imageMitte.picture.width, imageMitte.picture.Height));
  imageleft.Picture.Bitmap := image2.Picture.Bitmap;
end;
leider funktioniert es nicht so wie es soll. in image2 wird nur imageLinks angezeigt und mehr nicht.

kann mir jemand helfen?

gruss
urbanbruhin

3_of_8 20. Nov 2005 10:39

Re: Images zusammenfügen
 
Wenn die Images TImages sind, probier mal nicht immer imagex.picture sondern imagex.

100nF 20. Nov 2005 10:56

Re: Images zusammenfügen
 
aber das kann doch gar nicht gehen. TImage und TPicture ist ja nicht das gleiche :gruebel:

also ich bin jetzt so weit:
Delphi-Quellcode:
image2.picture.assign(imageleft.picture.bitmap);
Image2.Picture.Bitmap.Width := Image2.Picture.Bitmap.Width + imageleft.picture.bitmap.width;
image2.picture.Bitmap.Canvas.CopyRect(rect(imageleft.Picture.width, 0, imagemitte.picture.Width +
imageleft.picture.width, imagemitte.picture.height), imagemitte.picture.bitmap.Canvas, rect(0, 0,
imagemitte.picture.width, imagemitte.picture.Height));
die zwei images werden zwar zusammengefügt, jedoch ist hinter dem image2 noch ein weisser strich...

3_of_8 20. Nov 2005 11:00

Re: Images zusammenfügen
 
Dann musst du halt das ganze 1 Pixel weniger machen. Und TImage hat auch eine Width, Height, Canvas usw.

Khabarakh 20. Nov 2005 11:22

Re: Images zusammenfügen
 
Sind die Images überhaupt sichtbar? Wenn nein, solltest du lieber gleich TBitmaps benutzen.
Delphi-Quellcode:
// Ich gehe mal davon aus, dass alle Bitmaps die gleiche Höhe haben
procedure CombineBitmaps(ALeft, AMid, ARight, ADest: TBitmap; const AMidCount: Integer);
var
  i: Integer;
begin
  ADest.Height := ALeft.Height;
  ADest.Width := ALeft.Width + AMid.Width * AMidCount + ARight.Width;
  ADest.Draw(0, 0, ALeft);
  for i := 0 to MidCount - 1 do
    ADest.Draw(ALeft.Width + AMid.Width * i, 0, AMid);
  ADest.Draw(ADest.WIdth - ARight.Width, 0, ARight);
end;
So würde es jedenfalls mit der GR32-Lib funktionieren, wahrscheinlich musst du den Code noch etwas anpassen.


Zitat:

Zitat von 3_of_8
Dann musst du halt das ganze 1 Pixel weniger machen. Und TImage hat auch eine Width, Height, Canvas usw.

TImage.Canvas ist nichts anderes als TImage.Picture.Bitmap.Canvas :wink: .

100nF 20. Nov 2005 11:29

Re: Images zusammenfügen
 
juhuu es funktioniert!! :bounce1:

vielen dank!!

ich musste den code nur ein bisschen abändern, jetzt sieht er so aus:
Delphi-Quellcode:
procedure CombineBitmaps(ALeft, AMid, ARight, ADest: TBitmap; const AMidCount: Integer);
var
  i: Integer;
begin
  ADest.Height := ALeft.Height;
  ADest.Width := ALeft.Width + AMid.Width * AMidCount + ARight.Width;
  ADest.Canvas.draw(0, 0, ALeft);
  for i := 0 to AMidCount - 1 do
    ADest.canvas.Draw(ALeft.Width + AMid.Width * i, 0, AMid);
  ADest.canvas.Draw(ADest.WIdth - ARight.Width, 0, ARight);
end;
gruss
urbanbruhin

Gameboy 11. Mai 2012 07:34

AW: Images zusammenfügen
 
Geht sowas auch mit jpg Bildern?
Ich habe Zwei Bilder ein großes Bild auf das ein kleineres Bild rechts unten bündig gesetzt werden soll und dann als neues Bild gespeichert werden.

DeddyH 11. Mai 2012 08:11

AW: Images zusammenfügen
 
Ich bin nicht sicher, aber IIRC kommt man an den Canvas eines JPEGImage nicht direkt heran. Aber man kann ja beide Bilder in Bitmaps umwandeln, zusammenpinseln und das Ergebnis wieder in ein JPEG zurückwandeln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:09 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