Autor |
Beitrag |
barty
Hält's aus hier
Beiträge: 10
|
Verfasst: 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
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.07.09 18:37
Wenn du zwei TBitmaps hast, kannst du die Methode Draw verwenden: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var a, b: TBitmap; begin ... a.Canvas.Draw(0, 0, b); a.SaveToFile(...); ... | // EDIT:
Crosslink...
www.delphipraxis.net/post1055774.html
// EDIT2: http://forum.delphi-treff.de/showthread.php?p=195360
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: 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:
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.
Zuletzt bearbeitet von ffgorcky am Sa 04.07.09 19:27, insgesamt 1-mal bearbeitet
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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 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
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: 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,
|
|
|