Ejemplo n.º 1
0
        /// <summary>
        /// 相似度测试 包括相似度识别和生成图片报告
        /// </summary>
        private void xiangsiduTest2()
        {
            string pathOld = pathFolder1;
            string pathNew = pathFolder2;

            string[] filePath    = Directory.GetFiles(pathOld).OrderBy(x => x.Length).ThenBy(x => x).ToArray();
            string[] filePathNew = Directory.GetFiles(pathNew).OrderBy(x => x.Length).ThenBy(x => x).ToArray();
            //新建一张图,在图上绘制报告图
            Bitmap   bit = new Bitmap(1800, 3000);
            Graphics g   = Graphics.FromImage(bit);

            g.FillRectangle(Brushes.White, new Rectangle(0, 0, 1800, 3000));
            SolidBrush drawBrush = new SolidBrush(Color.Black);

            //初始化进度条
            if (toolStripProgressBar1.Value != 0)
            {
                toolStripProgressBar1.Value = 0;
            }
            toolStripProgressBar1.Maximum = filePath.Length;
            int    mistake = 0;//计数:超过15阈值的计数
            double percent = 0;

            for (int i = 0; i < filePath.Length; i++)
            {
                Image <Bgr, Byte> imgOld = new Image <Bgr, Byte>(filePath[i]);
                Image <Bgr, Byte> imgNew = new Image <Bgr, Byte>(filePathNew[i]);

                int    x          = i / 100; //如果超过一百条,则在横坐标150位置继续画。 一段长度占150.假设能共有1200个字。要12行。长度总为12*150=1800.垂直需要100*30=3000;
                int    y          = i % 100;
                PointF drawPoint0 = new PointF(0 + x * 150, y * 30);
                PointF drawPoint1 = new PointF(30 + x * 150, y * 30);
                PointF drawPoint2 = new PointF(70 + x * 150, y * 30);
                PointF drawPoint3 = new PointF(110 + x * 150, y * 30);
                Font   drawFont0  = new Font("宋体", 10, FontStyle.Regular);
                Font   drawFont   = new Font("宋体", 16, FontStyle.Regular);
                g.DrawString(Path.GetFileNameWithoutExtension(filePath[i]), drawFont0, drawBrush, drawPoint0);//把字体画出来
                g.DrawImage(imgOld.ToBitmap(), drawPoint1);
                g.DrawImage(imgNew.ToBitmap(), drawPoint2);
                int diffNum = ImageDealClass.getHashDiff(imgOld, imgNew);
                if (diffNum > 15)
                {
                    mistake++;
                }
                g.DrawString(diffNum.ToString(), drawFont, drawBrush, drawPoint3);//把差异数画到坐标
                toolStripProgressBar1.Value++;
            }
            percent = Convert.ToDouble(mistake) / filePath.Length * 100;

            bit.Save(@"C:\Users\zbx\Desktop\结果.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            MessageBox.Show(@"生成图片位于:C:\Users\zbx\Desktop\结果.jpg" + "超出的共有" + mistake + "" + "占百分比为:" + percent);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 相似度测试 包括相似度识别和生成图片报告
        /// </summary>
        private void xiangsiduTest()
        {
            string pathOld = pathFolder1;
            string pathNew = pathFolder2;

            string[] filePath    = Directory.GetFiles(pathOld).OrderBy(x => x.Length).ThenBy(x => x).ToArray();
            string[] filePathNew = Directory.GetFiles(pathNew).OrderBy(x => x.Length).ThenBy(x => x).ToArray();
            //新建一张图,在图上绘制报告图
            Bitmap   bit = new Bitmap(290, 4380);
            Graphics g   = Graphics.FromImage(bit);

            g.FillRectangle(Brushes.White, new Rectangle(0, 0, 290, 4380));
            SolidBrush drawBrush = new SolidBrush(Color.Black);

            //初始化进度条
            if (toolStripProgressBar1.Value != 0)
            {
                toolStripProgressBar1.Value = 0;
            }
            toolStripProgressBar1.Maximum = filePath.Length;

            for (int i = 0; i < filePath.Length; i++)
            {
                Image <Bgr, Byte> imgOld     = new Image <Bgr, Byte>(filePath[i]);
                Image <Bgr, Byte> imgNew     = new Image <Bgr, Byte>(filePathNew[i]);
                PointF            drawPoint0 = new PointF(0, i * 30);   //图0放在0,0位置画30*30大小 这个画字体
                PointF            drawPoint1 = new PointF(200, i * 30); //图1放在30,0位置画30*30大小
                PointF            drawPoint2 = new PointF(230, i * 30); //图2放在60,0位置画30*30大小
                PointF            drawPoint3 = new PointF(260, i * 30); //图3放在90,0位置画30*30大小
                Font drawFont0 = new Font("宋体", 10, FontStyle.Regular);
                Font drawFont  = new Font("宋体", 16, FontStyle.Regular);
                g.DrawString(Path.GetFileNameWithoutExtension(filePath[i]), drawFont0, drawBrush, drawPoint0);//把字体画出来
                g.DrawImage(imgOld.ToBitmap(), drawPoint1);
                g.DrawImage(imgNew.ToBitmap(), drawPoint2);
                int diffNum = ImageDealClass.getHashDiff(imgOld, imgNew);
                g.DrawString(diffNum.ToString(), drawFont, drawBrush, drawPoint3);//把差异数画到坐标
                toolStripProgressBar1.Value++;
            }

            bit.Save(@"C:\Users\zbx\Desktop\结果.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            MessageBox.Show(@"生成图片位于:C:\Users\zbx\Desktop\结果.jpg");
        }