예제 #1
0
 /// <summary>
 /// 生成聚合图像
 /// </summary>
 /// <param name="mergeElementList">聚合元素列表</param>
 public void merge(List <MergeElement> mergeElementList)
 {
     resetCanvas();
     if (mergeElementList != null)
     {
         List <MergeElement> .Enumerator meEnumer = mergeElementList.GetEnumerator();
         while (meEnumer.Current != null)
         {
             MergeElement me = meEnumer.Current;
             baseBitmapGraphics.DrawImage(me.bitmap,
                                          new Rectangle(me.x, me.y, me.width, me.height));
             meEnumer.MoveNext();
         }
     }
 }
예제 #2
0
 /// <summary>
 /// 拷贝构造函数
 /// </summary>
 /// <param name="instance">拷贝实例</param>
 public MergeElement(MergeElement instance)
 {
     this.bitmap = instance.bitmap.Clone() as Bitmap;
     if (bitmap != null)
     {
         this.bitmap = bitmap;
     }
     else
     {
         throw new NullReferenceException("bitmap cannot be null");
     }
     this.x      = instance.x;
     this.y      = instance.y;
     this.width  = this.bitmap.Width;
     this.height = this.bitmap.Height;
 }
예제 #3
0
 /// <summary>
 /// 批量合并
 /// </summary>
 /// <param name="inputPicture1Directory">一号位图片目录</param>
 /// <param name="inputPicture2Directory">二号位图片目录</param>
 /// <param name="outputPictureDirectory">输出目录</param>
 /// <param name="outputPictureNamePrefix">输出名前缀</param>
 /// <param name="outputFormat">输出格式</param>
 /// <param name="outputWidth">输出图片宽</param>
 /// <param name="outputHeight">输出图片高</param>
 /// <param name="input1Width">一号位图片宽</param>
 /// <param name="input1Height">一号位图片高</param>
 /// <param name="input1Left">一号位图片左偏移</param>
 /// <param name="input1Top">一号位图片上偏移</param>
 /// <param name="input2Width">二号位图片宽</param>
 /// <param name="input2Height">二号位图片高</param>
 /// <param name="input2Left">二号位图片左偏移</param>
 /// <param name="input2Top">二号位图片上偏移</param>
 public static void batchMerge(
     string inputPicture1Directory, string inputPicture2Directory,
     string outputPictureDirectory, string outputPictureNamePrefix, ImageFormat outputFormat,
     int outputWidth, int outputHeight,
     int input1Width, int input1Height, int input1Left, int input1Top,
     int input2Width, int input2Height, int input2Left, int input2Top
     )
 {
     if (!Directory.Exists(outputPictureDirectory))
     {
         Directory.CreateDirectory(outputPictureDirectory);
     }
     if (Directory.Exists(inputPicture1Directory) && Directory.Exists(inputPicture2Directory) && Directory.Exists(outputPictureDirectory))
     {
         MergeCanvas mc               = new MergeCanvas(outputWidth, outputHeight);
         var         input1Enumer     = Directory.EnumerateFiles(inputPicture1Directory);
         var         input2Enumer     = Directory.EnumerateFiles(inputPicture2Directory);
         int         i                = 0;
         string      outputPiturePath = outputPictureDirectory + outputPictureNamePrefix +
                                        rand.Next(1, 100000).ToString().PadLeft(5, '0') + "." + outputFormat.ToString();
         foreach (string input1PicturePath in input1Enumer)
         {
             Bitmap bmpInput1;
             try
             {
                 bmpInput1 = new Bitmap(input1PicturePath);
                 i++;
             }
             catch
             {
                 continue;
             }
             int          j   = 0;
             MergeElement me1 = new MergeElement(bmpInput1, input1Left, input1Top, input1Width, input1Height);
             foreach (string input2PicturePath in input2Enumer)
             {
                 Bitmap bmpInput2;
                 try
                 {
                     bmpInput2 = new Bitmap(input2PicturePath);
                     j++;
                 }
                 catch
                 {
                     continue;
                 }
                 while (File.Exists(outputPiturePath))
                 {
                     outputPiturePath =
                         outputPictureDirectory + outputPictureNamePrefix +
                         rand.Next(1, 100000).ToString().PadLeft(5, '0') + "." + outputFormat.ToString();
                 }
                 MergeElement me2 = new MergeElement(bmpInput2, input2Left, input2Top, input2Width, input2Height);
                 mc.merge(new MergeElement[] { me1, me2 });
                 mc.saveMergedPicture(
                     outputPiturePath,
                     outputFormat);
                 me2.bitmap.Dispose();
             }
             me1.bitmap.Dispose();
         }
     }
 }