Entwickler-Ecke
Multimedia / Grafik - bild in ein anderes kopieren
barty - Sa 04.07.09 18:33
Titel: bild in ein anderes kopieren
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
ffgorcky - 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 [
http://www.delphi-forum.de/viewtopic.php?p=303592#303592] gemacht wurde:
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
jaenicke ist.
elundril - Sa 04.07.09 19:27
ffgorcky hat folgendes geschrieben : |
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 [http://www.delphi-forum.de/viewtopic.php?p=303592#303592] 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
jaenicke - 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 - 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). ;)
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);
destFrame := aBack.Canvas.ClipRect; destFrame.Left := destFrame.Right div 4; destFrame.Right := destFrame.Right * 3 div 4; destFrame.Top := destFrame.Bottom div 4; destFrame.Bottom := destFrame.Bottom * 3 div 4; aFront.TransparentColor := clWhite; aFront.Transparent := true; aBack.Canvas.StretchDraw(destFrame, aFront);
aBack.SaveToFile(aResPath); aBack.Free; aFront.Free; end; |
mfG,
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!