C#--解析DataMatrix⼆维码
C#–解析DataMatrix⼆维码
最近在玩解析图⽚中的DM码。DM码在图⽚中显得尺⼨⼩,⽽且也不清晰。⼀开始直接上⾕歌的zxing,有些能解析出来,但是有些却显得⽆能为⼒。,⽤它解析,成功率⼤⼤提升,但是耗时。在调⽤zxing或者DM进⾏解析时,进⾏了
1 裁减–把⼆维码区域裁减出来(DM码在图⽚中太⼩,是必要的⼀步)
2 解析,如果不成功则旋转90度解析,直到解析成功或则旋转270度
其中,裁减这⼀步使⽤的是clone⽅法,但是不清楚为何有时使⽤这个裁减出来的图⽚zxing还是不能解析出来,但是使⽤win7系统⾃带的画图裁减并另存为jpg格式的时候,zxing却能解析。百思不得其解。
另外,如何实现⾃动识别出⼆维码区域呢?需要对图像进⾏⼀些处理吗?OpenCV?
2018-8-14
1 出裁减图⽚与win系统画图板裁减不⼀致的原因了,因为没有设置分辨率。
2 代码如下
Rectangle imgRect = new Rectangle();
imgRect.X = rect.X * pictureBox1.Image.Width / pictureBox1.Width;decoder
imgRect.Y = rect.Y * pictureBox1.Image.Height / pictureBox1.Height;
imgRect.Height = rect.Height * pictureBox1.Image.Height / pictureBox1.Height;
imgRect.Width = rect.Width * pictureBox1.Image.Width / pictureBox1.Width;
if (imgRect.Width == 0 || imgRect.Height == 0) return;
Bitmap srcImg = new Bitmap(textBox1.Text);
Bitmap b = new Bitmap(imgRect.Width, imgRect.Height);
b.SetResolution(pictureBox1.Image.HorizontalResolution, pictureBox1.Image.VerticalResolution);
b = srcImg.Clone(imgRect,srcImg.PixelFormat);
srcImg.Dispose();
pictureBox2.Image = b;
textBox2.Text = "解码中...";
this.Update();
//DmtxImageDecoder DMdecoder = new DmtxImageDecoder();
BarcodeReader br = new BarcodeReader();
Result r = null;
string strDMCode = null;
for (int i = 0; i < 3; i++)
{
//List<string> result = DMdecoder.DecodeImage(bitmap);
r = br.Decode(b);
if (r != null)
{
strDMCode += "Zxing: " + r.Text + "\r\n";
break;
}
//if (result.Count > 0)
//{
// strDMCode += "DM: " + result[0] + "\r\n";
// //break;
//}
b.RotateFlip(RotateFlipType.Rotate90FlipNone);
}
if (strDMCode != null)
textBox2.Text = strDMCode;
else
textBox2.Text = "解码失败";
b.Dispose();
⽰例
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论