我有一个任意数量的列表,如何将它们压缩在一起?

时间:2014-03-05 17:24:03

标签: c# image list

我有一些列表代表一些图像的像素值,每个图像由0和1组成。我的问题是如何才能获得所有元素数为零的平均值,并将其表示在相同元素编号的新列表中,并为所有其他元素重复该过程? (获取所有元素的平均值,零,一,二和......)。因此,最终列表应与我的所有其他列表的长度相同,而每个元素都是所有其他列表的平均值。

2 个答案:

答案 0 :(得分:1)

伪代码:

averageImage = new image(size of source image)

for each image in list:
   for each pixel in image:
      add pixel to averageImage

averageImage = averageImage / numberOfSourceImages

答案 1 :(得分:1)

我写了这篇文章,但重读了你的问题并意识到它可能不符合你的要求。

尽管如此,它需要任意数量的Bitmap并平均其颜色。只需输入List<Bitmap>并致电ToBitmap()即可。

public class BitmapAverage {
  private readonly List<Bitmap> _bmps;

  public BitmapAverage(List<Bitmap> bmps) {
    _bmps = bmps;
  }

  private struct ColorAverage {
    public int A { get; set; }
    public int R { get; set; }
    public int G { get; set; }
    public int B { get; set; }
  }

  private Bitmap _averageImages() {
    var colors = new ColorAverage[_bmps.First().Width, _bmps.First().Height];
    foreach (var bmp in _bmps) {
      for (var x = 0; x < bmp.Width; x++) {
        for (var y = 0; y < bmp.Height; y++) {
          var color = bmp.GetPixel(x, y);
          colors[x, y].A += color.A;
          colors[x, y].R += color.R;
          colors[x, y].G += color.G;
          colors[x, y].B += color.B;
        }
      }
    }
    return _toBitmap(colors);
  }

  private Bitmap _toBitmap(ColorAverage[,] colors) {
    var bitmapToReturn = new Bitmap(_bmps[0].Width, _bmps[0].Height, _bmps[0].PixelFormat);
    for (var x = 0; x < colors.GetLength(0); x++) {
      for (var y = 0; y < colors.GetLength(1); y++) {
        bitmapToReturn.SetPixel(x, y, Color.FromArgb(colors[x,y].A / _bmps.Count, 
                                                     colors[x,y].R / _bmps.Count, 
                                                     colors[x,y].G / _bmps.Count, 
                                                     colors[x,y].B / _bmps.Count)
        );
      }
    }
    return bitmapToReturn;
  }

  public Bitmap ToBitmap() {
    return _averageImages();
  }
}

img + img + img = img

此处的完整尺寸图片:http://imgur.com/0oPTMi7,ejMxLaL,OlV9y6A,IDnLdoe#0