如何从两个图像创建一个图像
本文关键字:图像 创建 一个 两个 | 更新日期: 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
方法来获取Image
的Graphics
,然后使用该对象的方法在图像上绘制所有内容:
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);