1

我想创建两个将并排的新图像。如果我有 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 的顶层,就可以了。现在我尝试像这样使用它:

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 ​​'string' 不包含 'DoubleBitmap' 的定义,并且最佳扩展方法重载 'DownloadImages.BitmapExtensions.DoubleBitmap(System.Drawing.Bitmap)' 有一些无效参数

错误 2 实例参数:无法从“字符串”转换为“System.Drawing.Bitmap”

错误 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:无法从 'string' 转换为 'System.Drawing.Bitmap'

而且我在 imagesRainUrls 列表中还有更多图像,然后是 SatelliteUrls 列表,所以我怎样才能让它合并两个图像,直到 SatelliteUrls 图像的数量?雨图像我有 62 和卫星只有 9 在这个过程的最后,我将从所有合并的 gif 和未合并的 gif 中制作动画 gif。所以动画将是一个 gif,前 9 个图像合并,其余的 Rain 不会合并,而是相同的动画。

那么我如何使用 FOR 循环来实现它,因为我有更多的雨图像然后是卫星,所以我只需要合并 9 个图像。

4

1 回答 1

2

您可以使用Graphics.FromImage方法获取然后使用该对象GraphicsImage方法在图像上绘制所有内容:

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);
于 2013-09-18T16:35:51.643 回答