Autor Beitrag
barty
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 04.07.09 18:33 
servus

ich habe folgendes problem

ich möchte ein bild auf bzw in ein anderes kopieren und abspeichern. doch leider hab ich keinen plan wie.

ich lade das erste bild in ein image. das ist soweit kein problem.

nur wie bekomme ich jetzt das 2 bild an eine bestimmt stelle in das image???


kann mir ja jemand weiterhelfen

schon mal danke für evtl. hilfe
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 04.07.09 18:37 
Wenn du zwei TBitmaps hast, kannst du die Methode Draw verwenden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  a, b: TBitmap;
begin
...
  a.Canvas.Draw(00, b);
  a.SaveToFile(...);
...
// EDIT:
Crosslink... :roll:
www.delphipraxis.net/post1055774.html
// EDIT2: http://forum.delphi-treff.de/showthread.php?p=195360
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 04.07.09 19:18 
Also ich denke mal, Du könntest auch sagen, dass Du das andere Bild ab einem bestimmten Pixel einfügen möchtest
- also so, wie es hier gemacht wurde:

ausblenden Delphi-Quelltext
1:
image1.Canvas.Draw((gewuenschterXAchsenStartpunkt),(gewuenschterYAchsenStartpunkt),einzufuegendesBild);					


Wobei ich immer nicht so ganz genau weiß, wierum x- und y-Achse sind - ich meine zumindest, dass die X-Achse die waagerechte und die Y-Achse die senkrechte ist - oder?
Oder möchtest Du das ganze lieber Pixel pro Pixel übertragen?

PS: jetzt, wo ich mir das so angucke, fällt mir auf, dass das ja eigentlich auch die Lösung von user profile iconjaenicke ist.


Zuletzt bearbeitet von ffgorcky am Sa 04.07.09 19:27, insgesamt 1-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 04.07.09 19:27 
user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Also ich denke mal, Du könntest auch sagen, dass Du das andere Bild ab einem bestimmten Pixel einfügen möchtest
- also so, wie es hier gemacht wurde:

image1.Canvas.Draw((gewuenschterXAchsenStartpunkt),(gewuenschterYAchsenStartpunkt),logobmp);

Wobei ich immer nicht so ganz genau weiß, wierum x- und y-Achse sind - ich meine zumindest, dass die X-Achse die waagerechte und die Y-Achse die senkrechte ist - oder?
Oder möchtest Du das ganze lieber Pixel pro Pixel übertragen?


der link ist eigentlich der selbe code den Jaenicke gepostet hat, nur in etwas längerer form. und pixel für pixel wäre denk ich etwas schlechter von der performance her. ;)

beim Canvas sind afaik x-achse waagerecht und y-achse senkrecht, lediglich der ursprung ist links oben statt links unten.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 04.07.09 19:53 
Nicht ganz der selbe Code, bei ihm sind noch Klammern dabei, die, wenn man die in dem Quelltext benutzt, an manchen Stellen zu Kompilierfehlern führen. Man sollte also darauf achten, dass man sich unnötige Klammern erst gar nicht angewöhnt. ;-)
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Sa 04.07.09 20:43 
Hi :)

Wenn die Bilder nicht zufällig die selbe Auflösung haben, könnte das u.U. etwas komisch aussehen. Daher lieber StretchDraw nehmen, dann müsst ihr das Größenverhältnis auch nicht beachten. Das Stretchen verbraucht natürlich auch ein wenig Rechenleistung und macht das Bild gegebenenfalls unschärfer.

Dann bleibt natürlich noch zu erwähnen, dass man Paintboxen oder zur Not auch Images natürlich ausschließlich zur Anzeige verwendet. Also lieber eine Bitmap verwenden, die dann rein im Speicher vorliegt(oder auch gerne ein anderes Dateiformat). ;)

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:
procedure CombineImages(const aImgFront, aImgBack, aResPath: String);
var
  aFront, aBack: TBitmap;
  destFrame: TRect;
begin
  aFront := TBitmap.Create;
  aBack := TBitmap.Create;
  aFront.LoadFromFile(aImgFront);
  aBack.LoadFromFile(aImgBack);

  //Zielrechteck zurechtschneiden
  destFrame := aBack.Canvas.ClipRect;  //Gesamter Bildbereich
  destFrame.Left := destFrame.Right div 4;  //links ein Viertel freilassen
  destFrame.Right := destFrame.Right * 3 div 4;  //rechts ein Viertel freilassen
  destFrame.Top := destFrame.Bottom div 4;  //oben ein Viertel freilassen
  destFrame.Bottom := destFrame.Bottom * 3 div 4;  //unten ein Viertel freilassen

  aFront.TransparentColor := clWhite;  //spaßeshalber malen wir mal nur drüber, statt zu ersetzen
  aFront.Transparent := true;
  aBack.Canvas.StretchDraw(destFrame, aFront);

  aBack.SaveToFile(aResPath);
  aBack.Free;
  aFront.Free;
end;


mfG,