WPF判断两个PNG图片是否碰撞

这个方法有几个前提

1.两个Image必须在一个Canvas中

2.两个Image的Canvas.Top和Canvas.Left必须赋值

上一篇讲了判断一个PNG图片某个点是否透明 这个基本类似的方法

主题思路

1.利用Rect判断两个Image是否有重合

2.只判断重合部分是否存在碰撞

3.将重合区域分成4块 由外向内判定

下面是代码部分

  1   /// <summary>
  2         /// 判断画布上两个Image是否碰撞了
  3         /// </summary>
  4         /// <param name="ig1">Image1</param>
  5         /// <param name="ig2">Image2</param>
  6         /// <returns>是否碰撞</returns>
  7         public static Boolean IsImageInside(System.Windows.Controls.Image ig1, System.Windows.Controls.Image ig2)
  8         {
  9
 10             if (ig1.Source == null || ig2.Source == null)
 11             {
 12                 return false;
 13             }
 14             Rect containingRect1 = new Rect(Canvas.GetLeft(ig1), Canvas.GetTop(ig1), ig1.ActualWidth, ig1.ActualHeight);
 15             Rect containingRect2 = new Rect(Canvas.GetLeft(ig2), Canvas.GetTop(ig2), ig2.ActualWidth, ig2.ActualHeight);
 16             containingRect1.Intersect(containingRect2);
 17             if (containingRect1.IsEmpty)
 18             {
 19                 return false;
 20             }
 21             System.Windows.Point RectPoint = containingRect1.TopLeft;
 22             BitmapSource m1 = (BitmapSource)ig1.Source;
 23             BitmapSource m2 = (BitmapSource)ig2.Source;
 24             using (System.Drawing.Bitmap bmp1 = new System.Drawing.Bitmap(m1.PixelWidth, m1.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb))
 25             {
 26
 27                 System.Drawing.Imaging.BitmapData data1 = bmp1.LockBits(
 28                 new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp1.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
 29                 m1.CopyPixels(Int32Rect.Empty, data1.Scan0, data1.Height * data1.Stride, data1.Stride); bmp1.UnlockBits(data1);
 30
 31                 double dx1 = 1;
 32                 double dy1 = 1;
 33
 34                 #region 获取实际图像点
 35
 36                 #region 获取缩放比例
 37
 38                 switch (ig1.Stretch)
 39                 {
 40                     case Stretch.Fill:
 41                         dx1 = bmp1.Width / ig1.ActualWidth;
 42                         dy1 = bmp1.Height / ig1.ActualHeight;
 43                         break;
 44                     case Stretch.None:
 45                         break;
 46                     case Stretch.Uniform:
 47                         if (ig1.ActualWidth > ig1.ActualHeight)
 48                         {
 49                             dx1 = bmp1.Width / ig1.ActualWidth;
 50                             dy1 = (bmp1.Height / bmp1.Width) * dx1;
 51                         }
 52                         else
 53                         {
 54                             dy1 = bmp1.Height / ig1.ActualHeight;
 55                             dx1 = (bmp1.Width / bmp1.Height) * dy1;
 56                         }
 57                         break;
 58                     case Stretch.UniformToFill:
 59                         if (ig1.ActualWidth > ig1.ActualHeight)
 60                         {
 61                             dx1 = bmp1.Width / ig1.ActualWidth;
 62                             dy1 = dx1;
 63                         }
 64                         else
 65                         {
 66                             dx1 = bmp1.Height / ig1.ActualHeight;
 67                             dy1 = dx1;
 68                         }
 69                         break;
 70                     default: break;
 71                 }
 72
 73                 #endregion
 74
 75                 int n = 0;
 76
 77                 using (System.Drawing.Bitmap bmp2 = new System.Drawing.Bitmap(m2.PixelWidth, m2.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb))
 78                 {
 79                     System.Drawing.Imaging.BitmapData data2 = bmp2.LockBits(
 80             new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp2.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
 81                     m2.CopyPixels(Int32Rect.Empty, data2.Scan0, data2.Height * data2.Stride, data2.Stride); bmp2.UnlockBits(data2);
 82
 83                     double dx2 = 1;
 84                     double dy2 = 1;
 85
 86                     #region 获取缩放比例
 87
 88                     switch (ig2.Stretch)
 89                     {
 90                         case Stretch.Fill:
 91                             dx2 = bmp2.Width / ig2.ActualWidth;
 92                             dy2 = bmp2.Height / ig2.ActualHeight;
 93                             break;
 94                         case Stretch.None:
 95                             break;
 96                         case Stretch.Uniform:
 97                             if (ig2.ActualWidth > ig2.ActualHeight)
 98                             {
 99                                 dx2 = bmp2.Width / ig2.ActualWidth;
100                                 dy2 = (bmp2.Height / bmp2.Width) * dx2;
101                             }
102                             else
103                             {
104                                 dy2 = bmp2.Height / ig2.ActualHeight;
105                                 dx2 = (bmp2.Width / bmp2.Height) * dy2;
106                             }
107                             break;
108                         case Stretch.UniformToFill:
109                             if (ig2.ActualWidth > ig2.ActualHeight)
110                             {
111                                 dx2 = bmp2.Width / ig2.ActualWidth;
112                                 dy2 = dx2;
113                             }
114                             else
115                             {
116                                 dx2 = bmp2.Height / ig2.ActualHeight;
117                                 dy2 = dx2;
118                             }
119                             break;
120                         default: break;
121                     }
122
123                     #endregion
124
125                     double XX1 = Canvas.GetLeft(ig1);
126                     double YY1 = Canvas.GetTop(ig1);
127                     double XX2 = Canvas.GetLeft(ig2);
128                     double YY2 = Canvas.GetTop(ig2);
129                     //double ig1Width = ig1.ActualWidth;
130                     //double ig1Height = ig1.ActualHeight;
131                     double ig1Width = containingRect1.Width;
132                     double ig1Height = containingRect1.Height;
133                     double ig2Width = ig2.ActualWidth;
134                     double ig2Height = ig2.ActualHeight;
135                     Stretch ig1ImageStretchType = ig1.Stretch;
136                     Stretch ig2ImageStretchType = ig2.Stretch;
137                     Boolean isInset = false;
138
139                     #region 线程1
140
141                     Thread t1 = new Thread(delegate()
142                     {
143                         for (int i = 0; i < ig1Width / 2; i++)
144                         {
145                             if (isInset)
146                             {
147                                 break;
148                             }
149                             for (int j = 0; j < ig1Height / 2; j++)
150                             {
151                                 if (isInset)
152                                 {
153                                     break;
154                                 }
155
156                                 #region 判断图像1的点是否透明
157
158                                 System.Windows.Point p1 = new System.Windows.Point(i + RectPoint.X - XX1, j + RectPoint.Y - YY1);
159                                 int x1 = -1;
160                                 int y1 = -1;
161                                 switch (ig1ImageStretchType)
162                                 {
163                                     case Stretch.Fill:
164                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
165                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
166                                         break;
167                                     case Stretch.None:
168                                         x1 = int.Parse(p1.X.ToString("F0"));
169                                         y1 = int.Parse(p1.Y.ToString("F0"));
170                                         break;
171                                     case Stretch.Uniform:
172                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
173                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
174                                         break;
175                                     case Stretch.UniformToFill:
176                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
177                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
178                                         break;
179                                     default: break;
180                                 }
181                                 lock (bmp1)
182                                 {
183                                     if (x1 < 0 || y1 < 0 || x1 > bmp1.Width || y1 > bmp1.Height)
184                                     {
185                                         continue;
186                                     }
187                                     else
188                                     {
189                                         byte A = GetARGB(bmp1, x1, y1);
190                                         if ((int)A == 0)
191                                         {
192                                             continue;
193                                         }
194                                         else
195                                         {
196
197                                         }
198                                     }
199                                 }
200
201                                 #endregion
202
203                                 #region 判断图像1的点相对于位置的图像2的点是否透明
204
205                                 System.Windows.Point p2 = new System.Windows.Point(XX1 + p1.X - XX2, YY1 + p1.Y - YY2);
206                                 int x2 = -1;
207                                 int y2 = -1;
208                                 switch (ig2ImageStretchType)
209                                 {
210                                     case Stretch.Fill:
211                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
212                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
213                                         break;
214                                     case Stretch.None:
215                                         x2 = int.Parse(p2.X.ToString("F0"));
216                                         y2 = int.Parse(p2.Y.ToString("F0"));
217                                         break;
218                                     case Stretch.Uniform:
219                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
220                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
221                                         break;
222                                     case Stretch.UniformToFill:
223                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
224                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
225                                         break;
226                                     default: break;
227                                 }
228                                 lock (bmp2)
229                                 {
230                                     if (x2 < 0 || y2 < 0 || x2 > bmp2.Width || y2 > bmp2.Height)
231                                     {
232                                         continue;
233                                     }
234                                     else
235                                     {
236                                         byte A = GetARGB(bmp2, x2, y2);
237                                         if ((int)A == 0)
238                                         {
239                                             continue;
240                                         }
241                                         else
242                                         {
243                                             isInset = true;
244                                             break;
245                                         }
246                                     }
247                                 }
248                                 #endregion
249
250                             }
251                         }
252                         n = n + 1;
253                     });
254
255                     #endregion
256
257                     #region 线程2
258
259                     Thread t2 = new Thread(delegate()
260                     {
261                         for (int i = int.Parse(ig1Width.ToString("F0")) - 1; i > int.Parse((ig1Width / 2).ToString("F0")); i--)
262                         {
263                             if (isInset)
264                             {
265                                 break;
266                             }
267                             for (int j = 0; j < ig1Height / 2; j++)
268                             {
269                                 if (isInset)
270                                 {
271                                     break;
272                                 }
273
274                                 #region 判断图像1的点是否透明
275
276                                 System.Windows.Point p1 = new System.Windows.Point(i + RectPoint.X - XX1, j + RectPoint.Y - YY1);
277                                 int x1 = -1;
278                                 int y1 = -1;
279                                 switch (ig1ImageStretchType)
280                                 {
281                                     case Stretch.Fill:
282                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
283                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
284                                         break;
285                                     case Stretch.None:
286                                         x1 = int.Parse(p1.X.ToString("F0"));
287                                         y1 = int.Parse(p1.Y.ToString("F0"));
288                                         break;
289                                     case Stretch.Uniform:
290                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
291                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
292                                         break;
293                                     case Stretch.UniformToFill:
294                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
295                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
296                                         break;
297                                     default: break;
298                                 }
299                                 lock (bmp1)
300                                 {
301                                     if (x1 < 0 || y1 < 0 || x1 > bmp1.Width || y1 > bmp1.Height)
302                                     {
303                                         continue;
304                                     }
305                                     else
306                                     {
307                                         byte A = GetARGB(bmp1, x1, y1);
308                                         if ((int)A == 0)
309                                         {
310                                             continue;
311                                         }
312                                         else
313                                         {
314
315                                         }
316                                     }
317                                 }
318
319                                 #endregion
320
321                                 #region 判断图像1的点相对于位置的图像2的点是否透明
322
323                                 System.Windows.Point p2 = new System.Windows.Point(XX1 + p1.X - XX2, YY1 + p1.Y - YY2);
324                                 int x2 = -1;
325                                 int y2 = -1;
326                                 switch (ig2ImageStretchType)
327                                 {
328                                     case Stretch.Fill:
329                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
330                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
331                                         break;
332                                     case Stretch.None:
333                                         x2 = int.Parse(p2.X.ToString("F0"));
334                                         y2 = int.Parse(p2.Y.ToString("F0"));
335                                         break;
336                                     case Stretch.Uniform:
337                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
338                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
339                                         break;
340                                     case Stretch.UniformToFill:
341                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
342                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
343                                         break;
344                                     default: break;
345                                 }
346                                 lock (bmp2)
347                                 {
348                                     if (x2 < 0 || y2 < 0 || x2 > bmp2.Width || y2 > bmp2.Height)
349                                     {
350                                         continue;
351                                     }
352                                     else
353                                     {
354                                         byte A = GetARGB(bmp2, x2, y2);
355                                         if ((int)A == 0)
356                                         {
357                                             continue;
358                                         }
359                                         else
360                                         {
361                                             isInset = true;
362                                             break;
363                                         }
364                                     }
365                                 }
366                                 #endregion
367
368                             }
369                         }
370                         n = n + 1;
371                     });
372
373                     #endregion
374
375                     #region 线程3
376
377                     Thread t3 = new Thread(delegate()
378                     {
379                         for (int i = 0; i < ig1Width / 2; i++)
380                         {
381                             if (isInset)
382                             {
383                                 break;
384                             }
385                             for (int j = int.Parse(ig1Height.ToString("F0")) - 1; j > int.Parse((ig1Height / 2).ToString("F0")); j--)
386                             {
387                                 if (isInset)
388                                 {
389                                     break;
390                                 }
391
392                                 #region 判断图像1的点是否透明
393
394                                 System.Windows.Point p1 = new System.Windows.Point(i + RectPoint.X - XX1, j + RectPoint.Y - YY1);
395                                 int x1 = -1;
396                                 int y1 = -1;
397                                 switch (ig1ImageStretchType)
398                                 {
399                                     case Stretch.Fill:
400                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
401                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
402                                         break;
403                                     case Stretch.None:
404                                         x1 = int.Parse(p1.X.ToString("F0"));
405                                         y1 = int.Parse(p1.Y.ToString("F0"));
406                                         break;
407                                     case Stretch.Uniform:
408                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
409                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
410                                         break;
411                                     case Stretch.UniformToFill:
412                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
413                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
414                                         break;
415                                     default: break;
416                                 }
417                                 lock (bmp1)
418                                 {
419                                     if (x1 < 0 || y1 < 0 || x1 > bmp1.Width || y1 > bmp1.Height)
420                                     {
421                                         continue;
422                                     }
423                                     else
424                                     {
425                                         byte A = GetARGB(bmp1, x1, y1);
426                                         if ((int)A == 0)
427                                         {
428                                             continue;
429                                         }
430                                         else
431                                         {
432
433                                         }
434                                     }
435                                 }
436
437                                 #endregion
438
439                                 #region 判断图像1的点相对于位置的图像2的点是否透明
440
441                                 System.Windows.Point p2 = new System.Windows.Point(XX1 + p1.X - XX2, YY1 + p1.Y - YY2);
442                                 int x2 = -1;
443                                 int y2 = -1;
444                                 switch (ig2ImageStretchType)
445                                 {
446                                     case Stretch.Fill:
447                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
448                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
449                                         break;
450                                     case Stretch.None:
451                                         x2 = int.Parse(p2.X.ToString("F0"));
452                                         y2 = int.Parse(p2.Y.ToString("F0"));
453                                         break;
454                                     case Stretch.Uniform:
455                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
456                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
457                                         break;
458                                     case Stretch.UniformToFill:
459                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
460                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
461                                         break;
462                                     default: break;
463                                 }
464                                 lock (bmp2)
465                                 {
466                                     if (x2 < 0 || y2 < 0 || x2 > bmp2.Width || y2 > bmp2.Height)
467                                     {
468                                         continue;
469                                     }
470                                     else
471                                     {
472                                         byte A = GetARGB(bmp2, x2, y2);
473                                         if ((int)A == 0)
474                                         {
475                                             continue;
476                                         }
477                                         else
478                                         {
479                                             isInset = true;
480                                             break;
481                                         }
482                                     }
483                                 }
484                                 #endregion
485                             }
486                         }
487                         n = n + 1;
488                     });
489
490                     #endregion
491
492                     #region 线程4
493
494                     Thread t4 = new Thread(delegate()
495                     {
496                         for (int i = int.Parse(ig1Width.ToString("F0")) - 1; i > int.Parse((ig1Width / 2).ToString("F0")); i--)
497                         {
498                             if (isInset)
499                             {
500                                 break;
501                             }
502                             for (int j = int.Parse(ig1Height.ToString("F0")) - 1; j > int.Parse((ig1Height / 2).ToString("F0")); j--)
503                             {
504                                 if (isInset)
505                                 {
506                                     break;
507                                 }
508                                 #region 判断图像1的点是否透明
509
510                                 System.Windows.Point p1 = new System.Windows.Point(i + RectPoint.X - XX1, j + RectPoint.Y - YY1);
511                                 int x1 = -1;
512                                 int y1 = -1;
513                                 switch (ig1ImageStretchType)
514                                 {
515                                     case Stretch.Fill:
516                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
517                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
518                                         break;
519                                     case Stretch.None:
520                                         x1 = int.Parse(p1.X.ToString("F0"));
521                                         y1 = int.Parse(p1.Y.ToString("F0"));
522                                         break;
523                                     case Stretch.Uniform:
524                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
525                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
526                                         break;
527                                     case Stretch.UniformToFill:
528                                         x1 = int.Parse((p1.X * dx1).ToString("F0"));
529                                         y1 = int.Parse((p1.Y * dy1).ToString("F0"));
530                                         break;
531                                     default: break;
532                                 }
533                                 lock (bmp1)
534                                 {
535                                     if (x1 < 0 || y1 < 0 || x1 > bmp1.Width || y1 > bmp1.Height)
536                                     {
537                                         continue;
538                                     }
539                                     else
540                                     {
541                                         byte A = GetARGB(bmp1, x1, y1);
542                                         if ((int)A == 0)
543                                         {
544                                             continue;
545                                         }
546                                         else
547                                         {
548
549                                         }
550                                     }
551                                 }
552
553                                 #endregion
554
555                                 #region 判断图像1的点相对于位置的图像2的点是否透明
556
557                                 System.Windows.Point p2 = new System.Windows.Point(XX1 + p1.X - XX2, YY1 + p1.Y - YY2);
558                                 int x2 = -1;
559                                 int y2 = -1;
560                                 switch (ig2ImageStretchType)
561                                 {
562                                     case Stretch.Fill:
563                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
564                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
565                                         break;
566                                     case Stretch.None:
567                                         x2 = int.Parse(p2.X.ToString("F0"));
568                                         y2 = int.Parse(p2.Y.ToString("F0"));
569                                         break;
570                                     case Stretch.Uniform:
571                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
572                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
573                                         break;
574                                     case Stretch.UniformToFill:
575                                         x2 = int.Parse((p2.X * dx2).ToString("F0"));
576                                         y2 = int.Parse((p2.Y * dy2).ToString("F0"));
577                                         break;
578                                     default: break;
579                                 }
580                                 lock (bmp2)
581                                 {
582                                     if (x2 < 0 || y2 < 0 || x2 > bmp2.Width || y2 > bmp2.Height)
583                                     {
584                                         continue;
585                                     }
586                                     else
587                                     {
588                                         byte A = GetARGB(bmp2, x2, y2);
589                                         if ((int)A == 0)
590                                         {
591                                             continue;
592                                         }
593                                         else
594                                         {
595                                             isInset = true;
596                                             break;
597                                         }
598                                     }
599                                 }
600                                 #endregion
601                             }
602                         }
603                         n = n + 1;
604                     });
605
606                     #endregion
607
608                     t1.Start();
609                     t2.Start();
610                     t3.Start();
611                     t4.Start();
612                     while (n != 4)
613                     {
614                         Thread.Sleep(1);
615                     }
616                     return isInset;
617                 }
618
619                 #endregion
620
621             }
622         }

这个算法我用了连个128X128的图片放到两个200X200的Image中

正常利用VS调试每次判定在150ms左右 不调试直接运行大概在3~10ms之间

电脑配置CPU G1840 内存4G 效率还可以 喜欢的朋友可以参考一下

欢迎大家留下脚印~

本文版权归本作者所有 未经允许禁止用于商业目的 转载请注明出处

时间: 2024-10-11 10:48:02

WPF判断两个PNG图片是否碰撞的相关文章

WPF 下两种图片合成或加水印的方式(转载)

来源:http://www.cnblogs.com/lxblog/ 最近项目中应用多次应用了图片合成,为了今后方便特此记下. 在WPF下有两种图片合成的方式,一种还是用原来C#提供的GDI+方式,命名空间是System.Drawing 和 System.Drawing.Imaging,另一种是WPF中新添加的API,命名空间是 System.Windows.Media 和 System.Windows.Media.Imaging . 我们来做一个简单的例子,分别用上面的两种方式实现,功能是在一个

如何判断单链表是否存在环 &amp; 判断两链表是否相交

给定一个单链表,只给出头指针h: 1.如何判断是否存在环? 2.如何知道环的长度? 3.如何找出环的连接点在哪里? 4.带环链表的长度是多少? 解法: 1.对于问题1,使用追赶的方法,设定两个指针slow.fast,从头指针开始,每次分别前进1步.2步.如存在环,则两者相遇:如不存在环,fast遇到NULL退出. 2.对于问题2,记录下问题1的碰撞点p,slow.fast从该点开始,再次碰撞所走过的操作数就是环的长度s. 3.问题3:有定理:碰撞点p到连接点的距离=头指针到连接点的距离,因此,分

C# 判断两张图片是否一致的快速方法

#region 判断图片是否一致 /// <summary> /// 判断图片是否一致 /// </summary> /// <param name="img">图片一</param> /// <param name="bmp">图片二</param> /// <returns>是否一致</returns> public bool IsSameImg(Bitmap img

【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇三:批量处理后的txt文件入库处理

篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblogs.com/baiboy/p/wpf1.html 篇三:批量处理后的txt文件入库处理:http://www.cnblogs.com/baiboy/p/wpf2.html 篇四:关于OneNote入库处理以及审核:http://www.cnblogs.com/baiboy/p/wpf3.html [

php判断两张图片是否相同

1 <?php 2 /** 3 * sha1_file 4 计算并返回由 filename 指定的文件的 sha1 散列值. 5 该散列值是一个 40 字符长度的十六进制数字 6 * 成功返回一个字符串,否则返回 FALSE. 7 **/ 8 9 //这两个方法只能判断两张完全相同的图片,包括文件的大小,尺寸,另外这个方法还可以用来判断文件. 10 $file = __DIR__.DIRECTORY_SEPARATOR."1.jpg"; 11 12 $file2 = __DIR_

Java 判断两个对象是否相等

一.使用 == 与 equals == : 它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象.(基本数据类型==比较的是值,引用数据类型==比较的是内存地址) equals() : 它的作用也是判断两个对象是否相等.但它一般有两种使用情况: 情况1:类没有覆盖equals()方法.则通过equals()比较该类的两个对象时,等价于通过"=="比较这两个对象. 情况2:类覆盖了equals()方法.一般,我们都覆盖equals()方法来两个对象的内容相等:若它们的

WPF 通过位处理合并图片

原文:WPF 通过位处理合并图片 本文告诉大家,在使用 WPF 合并两张图片的处理,可以使用像素之间的与或和异或的方式,对三个颜色的通道进行处理. 先给大家看一下软件的界面 这就是通过将左边的两张图片叠加合并为一张图片,这里的蓝色的通道就是通过位或的方式,绿色通道使用与的方式,红色也使用或的方式. 在 WPF 修改图片颜色 已经告诉大家如何修改 WPF 的图片的颜色,但是为了叠加两张图片,还需要先读取图片的颜色 读取图片 在读取图片之前需要从文件加载图片,先在解决方案放两张图片,然后进行解析 在

java 判断两个时间相差的天数!

package com.datedaycha;     import java.text.SimpleDateFormat;     import java.util.Calendar;     import java.util.Date;     import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;     /*      * java 判断两个时间相差的天数     1.实现目标     输入:两

UIColor延伸:判断两个颜色是否相等

不管UIColor使用CIColor,CGColor还是其他方式初始化的,其CGColor属性都是可用的.CoreGraphics中提供一个函数,用于判断两个CGColor是否相等,因此我们可以通过这个函数判断两个UIColor是否相等,下面是看一个简单的例子: // 判断两个颜色是否是同一种颜色if (CGColorEqualToColor([UIColor whiteColor].CGColor, [UIColor colorWithRed:1 green:1 blue:1 alpha:1]