Laden...

Xamarin | Zwei Bilder (png, jpg, gif) verbinden (Watermark)

Erstellt von Buzz Tyca vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.405 Views
B
Buzz Tyca Themenstarter:in
50 Beiträge seit 2015
vor 7 Jahren
Xamarin | Zwei Bilder (png, jpg, gif) verbinden (Watermark)

Hallo zusammen,

zur Zeit arbeite ich mich in Xamarin (bisher nur Android) ein. Die ersten Gehversuche waren nach einigen Schwierigkeiten sehr erfolgreich. Nun möchte ich mein erstes richtiges Projekt umsetzen und hänge an einer Stelle fest.
Vielleicht hat jemand von euch eine Idee dazu.

Folgendes Problem:
Ich habe zwei Bilder die der Nutzer mittels GUI aus der Galerie auswählt. Das eine ist ein Logo, das andere ein normales Bild.
So weit, so erfolgreich...
Beide Bilder werden in ImageViews angezeigt und ich bekomme auch den Speicherort auf dem Gerät bzw. der Speicherkarte.
Ich möchte das Logo auf das Bild setzen und das neue Bild unter neuem Namen speichern.

Jetzt habe ich mir schon die Finger wund gegoogelt, und finde immer wieder neue Ansätze wie die Arbeit mit Bitmap oder Canvas, aber ich komme nicht wirklich voran.

Ein Schubs in die richtige Richtung wäre toll.
Gibt es evtl eine Library die ich nutzen kann?

LG Buzz

193 Beiträge seit 2006
vor 7 Jahren

Dafür brauchst du keine externe Library. Android bringt da alles mit was du brauchst.

Die Bilder kannst du ja auch einfach in Bitmaps (Android.Graphics.Bitmap) laden.
Mit Bitmap.CreateBitmap(width, height, format) erzeugst du dann das Ziel-Bitmap auf das du beide Bilder zeichnen kannst.
Zum Zeichnen brauchst du noch ein Canvas (Android.Graphics.Canvas). Dem gibst du im Constructor das erzeugte Bitmap mit.
Mit Canvas.DrawBitmap(bitmap, ....) kannst du dann die anderen beiden Bilder in das neue Bild rein zeichnen.

Ungefär so sollte der Code dazu aussehen (hab ich jetzt einfach so geschrieben; nicht getestet)


var targetBitmap = Bitmap.CreateBitmap(width, height, Bitmap.Config.Argb8888);

using(var canvas = new Canvas(targetBitmap))
{
 using(var paint = new Paint(PaintFlags.AntiAlias))
 {
   canvas(bmp1, 0,0, paint);
   canvas(bmp2, 0,0, paint);
 }
}

Gruß Jake

B
Buzz Tyca Themenstarter:in
50 Beiträge seit 2015
vor 7 Jahren

Danke Jake! Das klingt gut. Ich werde das versuchen. Klingt, als wäre ich auf dem Richtigen Weg gewesen.
Manchmal ist eben der Wurm drin 😉

B
Buzz Tyca Themenstarter:in
50 Beiträge seit 2015
vor 7 Jahren

War genau der Richtige Weg!
Danke nochmal

Zur Vervollständigung eine kleine Komplettierung:


private Bitmap mergePics(Bitmap bmpLogo, Bitmap bmpImg)
{
     var targetBitmap = Bitmap.CreateBitmap(1024, 768, Bitmap.Config.Argb8888);
     using(var canvas = new Canvas(targetBitmap))
     {
          using(var paint = new Paint(PaintFlags.AntiAlias))
          {
             canvas.DrawBitmap(bmpImg, 0,0, paint);
             canvas.DrawBitmap(bmpLogo, 0, 0, paint);
          }
     }
     return targetBitmap;
}

LG Buzz