Prosty pomysł: mam dwa obrazy, które chcę scalić, jeden ma wymiary 500 x 500 i jest przezroczysty pośrodku, a drugi ma wymiary 150 x 150.
Podstawowy pomysł jest następujący: utwórz puste płótno o wymiarach 500x500, umieść obraz 150x150 na środku pustego obszaru roboczego, a następnie skopiuj obraz 500x500 tak, aby przezroczysty środek prześwitywał przez 150x150.
Wiem, jak to zrobić w Javie, PHP i Pythonie ... Po prostu nie mam pojęcia, jakich obiektów / klas użyć w C #, wystarczy szybki przykład kopiowania obrazów do innego.
Odpowiedzi:
Zasadniczo używam tego w jednej z naszych aplikacji: chcemy nałożyć ikonę odtwarzania na klatkę wideo:
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) { } } }
źródło
Spowoduje to dodanie obrazu do innego.
using (Graphics grfx = Graphics.FromImage(image)) { grfx.DrawImage(newImage, x, y) }
Grafika znajduje się w przestrzeni nazw
System.Drawing
źródło
Po tym wszystkim znalazłem nową, łatwiejszą metodę, spróbuj tego ...
Może łączyć ze sobą wiele zdjęć:
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(); } } }
źródło