Ide sederhana: Saya memiliki dua gambar yang ingin saya gabungkan, satu adalah 500x500 yang transparan di tengah, yang lainnya adalah 150x150.
Ide dasarnya adalah: Buat kanvas kosong berukuran 500x500, posisikan gambar 150x150 di tengah kanvas kosong lalu salin gambar 500x500 sehingga bagian tengah transparannya memungkinkan 150x150 bersinar.
Saya tahu bagaimana melakukannya di Java, PHP dan Python ... Saya hanya tidak tahu objek / kelas apa yang akan digunakan di C #, contoh cepat menyalin gambar ke gambar lain sudah cukup.
Jawaban:
pada dasarnya saya menggunakan ini di salah satu aplikasi kami: kami ingin menampilkan ikon permainan di atas bingkai video:
Image playbutton; try { playbutton = Image.FromFile(/*somekindofpath*/); } catch (Exception ex) { return; } Image frame; try { frame = Image.FromFile(/*somekindofpath*/); } catch (Exception ex) { return; } using (frame) { using (var bitmap = new Bitmap(width, height)) { using (var canvas = Graphics.FromImage(bitmap)) { canvas.InterpolationMode = InterpolationMode.HighQualityBicubic; canvas.DrawImage(frame, new Rectangle(0, 0, width, height), new Rectangle(0, 0, frame.Width, frame.Height), GraphicsUnit.Pixel); canvas.DrawImage(playbutton, (bitmap.Width / 2) - (playbutton.Width / 2), (bitmap.Height / 2) - (playbutton.Height / 2)); canvas.Save(); } try { bitmap.Save(/*somekindofpath*/, System.Drawing.Imaging.ImageFormat.Jpeg); } catch (Exception ex) { } } }
sumber
Ini akan menambah gambar ke yang lain.
using (Graphics grfx = Graphics.FromImage(image)) { grfx.DrawImage(newImage, x, y) }
Grafik ada di namespace
System.Drawing
sumber
Setelah semua ini, saya menemukan metode baru yang lebih mudah coba ini ..
Itu dapat menggabungkan beberapa foto bersama:
public static System.Drawing.Bitmap CombineBitmap(string[] files) { //read all images into memory List<System.Drawing.Bitmap> images = new List<System.Drawing.Bitmap>(); System.Drawing.Bitmap finalImage = null; try { int width = 0; int height = 0; foreach (string image in files) { //create a Bitmap from the file and add it to the list System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(image); //update the size of the final bitmap width += bitmap.Width; height = bitmap.Height > height ? bitmap.Height : height; images.Add(bitmap); } //create a bitmap to hold the combined image finalImage = new System.Drawing.Bitmap(width, height); //get a graphics object from the image so we can draw on it using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(finalImage)) { //set background color g.Clear(System.Drawing.Color.Black); //go through each image and draw it on the final image int offset = 0; foreach (System.Drawing.Bitmap image in images) { g.DrawImage(image, new System.Drawing.Rectangle(offset, 0, image.Width, image.Height)); offset += image.Width; } } return finalImage; } catch (Exception ex) { if (finalImage != null) finalImage.Dispose(); throw ex; } finally { //clean up memory foreach (System.Drawing.Bitmap image in images) { image.Dispose(); } } }
sumber