99 votes

Fusion de deux images en C # / .NET

Idée Simple: j'ai deux images que je veux fusionner, on est 500x500 qui est transparent dans le milieu de l'autre est 150x150.

L'idée de base est de Créer une toile vierge qui est 500x500, la position de la 150x150 image dans le milieu de la toile vierge, puis copier l'image de 500x500 de sorte que la transparence milieu de il permet à l'150x150 de briller à travers.

Je sais comment le faire en Java, PHP et Python... je n'ai pas la moindre idée de ce que les objets/classes à utiliser en C#, un rapide exemple de la copie d'images vers un autre suffirait.

114voto

Andreas Niedermair Points 8907

En gros, je l'utilise dans l'une de nos applications: nous voulons superposer un élément de lecture sur une image d'une vidéo:

 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 + 5), (bitmap.Height / 2) - (playbutton_height / 2 + 5));
    		canvas.Save();
    	}
    	try
    	{
    		bitmap.Save(/*somekindofpath*/, ImageFormat.Jpeg);
    	}
    	catch (Exception ex) { }
    }
}
 

66voto

Dustin Brooks Points 1578

Cela va ajouter une image à une autre.

 using (Graphics grfx = Graphics.FromImage(image))
{
    grfx.DrawImage(newImage, x, y)
}
 

Graphics est dans l'espace de noms System.Drawing

38voto

Anant Dabhi Points 3713

Après tout cela, j'ai trouvé une nouvelle méthode plus simple, essayez ceci ..

Il peut joindre plusieurs photos ensemble:

 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();
        }
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X