如何从两个图像创建一个图像

本文关键字:图像 创建 一个 两个 | 更新日期: 2023-09-27 18:31:45

我想创建两个并排的新图像。如果我有 4 张图像,那么制作包含 4 张图像的新图像。不是一个在另一个上,而是 2 个图像一个靠近另一个,或者如果是 4 个图像,那么另一个靠近另一个

图像。

到目前为止,我所做的是从两张图像中获取像素:

private void GetPixels(string File1, string File2)
        {
            Bitmap bmp1 = new Bitmap(File1);
            Bitmap bmp2 = new Bitmap(File2);
            for (int i = 0; i < bmp1.Width; i++)
            {
                for (int j = 0; j < bmp1.Height; j++)
                {
                    Color pixel = bmp1.GetPixel(i, j);
                }
            }
            for (int x = 0; x < bmp2.Width; x++)
            {
                for (int y = 0; y < bmp2.Height; y++)
                {
                    Color pixel = bmp1.GetPixel(x, y);
                }
            }
        }

我想创建新的位图,它的大小以某种方式足以存储其他两个位图。如何计算新位图的正确大小,以便它完全包含其他两个位图?

以及如何将像素添加到新位图?

编辑**

将其添加到命名空间下的 Form1 顶层,并且它的 ok。现在我尝试像这样使用它:

private void CreateNewImage()
        {
            for (int i = 0; i < imagesRainUrls.Count; i++)
            {
                //Use it
                //Double the same image
                Bitmap doubledBitmap =  imagesRainUrls[i].DoubleBitmap();
                //Append new image
                Bitmap appendedBitmap = imagesRainUrls.AppendBitmap(imagesSatelliteUrls[i]);
            }
        }
imagesRainUrls是图像列表

,也是imagesSatelliteUrls是图像列表。

我得到的错误:

错误 1 "字符串"不包含"DoubleBitmap"的定义,并且最佳扩展方法重载"DownloadImages.BitmapExtensions.DoubleBitmap(System.Drawing.Bitmap)"有一些无效的参数

错误 2 实例参数:无法从"字符串"转换为"系统.绘图.位图"

错误 3 'System.Collections.Generic.List' 不包含 'AppendBitmap' 的定义,并且最佳扩展方法重载 'DownloadImages.BitmapExtensions.AppendBitmap(System.Drawing.Bitmap, System.Drawing.Bitmap)' 有一些无效的参数

错误 4 实例参数:无法从"System.Collections.Generic.List"转换为"System.Drawing.Bitmap"

错误 5 参数 2:无法从"字符串"转换为"系统.绘图.位图"

而且我在图像RainUrls列表中有更多的图像,然后是卫星网址列表,所以我如何使它将合并两个图像,直到卫星网址图像的数量?雨图像我有 62 张,卫星只有 9 张在此过程的最后,我将从所有合并的 gif 和未合并的 gif 中制作动画 gif。因此,动画将是一个 gif,前 9 张图像合并,其余的雨不会合并,而是相同的动画。

那么我如何使用 FOR 循环来制作它,因为我有更多的雨图像,然后是 sateliite,所以我只需要合并 9 张图像。

如何从两个图像创建一个图像

您可以使用

Graphics.FromImage方法来获取ImageGraphics,然后使用该对象的方法在图像上绘制所有内容:

public static class BitmapExtensions {
  public static Bitmap DoubleBitmap(this Bitmap bm){
     Bitmap bitmap = new Bitmap(bm.Width * 2, bm.Height);
     using(Graphics g = Graphics.FromImage(bitmap)){
       Rectangle rect = new Rectangle(Point.Empty, bm.Size);
       g.DrawImage(bm, rect);
       rect.Offset(bm.Width,0);
       g.DrawImage(bm, rect);
       return bitmap;
     }
  }      
  public static Bitmap AppendBitmap(this Bitmap bm, Bitmap rightBitmap){
    Bitmap bitmap = new Bitmap(bm.Width + rightBitmap.Width, Math.Max(bm.Height, rightBitmap.Height));
    using(Graphics g = Graphics.FromImage(bitmap)){
       Rectangle rect = new Rectangle(Point.Empty, bm.Size);
       g.DrawImage(bm, rect);
       rect = new Rectangle(new Point(bm.Width, 0), rightBitmap.Size);
       g.DrawImage(rightBitmap, rect);           
       return bitmap;
     }
  }
}
//Use it
//Double the same image
Bitmap doubledBitmap = yourBitmap.DoubleBitmap();
//Append new image
Bitmap appendedBitmap = yourBitmap.AppendBitmap(yourSecondBitmap);