在解碼時利用Thread把解碼動作丟到另一個Thread來做,才不會影響到WebCam_Capture取得WebCam影像資料的動作,解碼內容利用invoke來呼叫Form設定TextBox值,直接在Thread上設TextBox值是不被容許的。
this.textBox1.Text = "checking"; System.Drawing.Bitmap img = new System.Drawing.Bitmap(this.pictureBox1.Image, this.pictureBox1.Image.Size); thread1 obj = new thread1(img, this); System.Threading.Thread t = new System.Threading.Thread(obj.runMe); t.Start();
class thread1 { private System.Drawing.Bitmap picDecode; private Form1 form; public thread1(System.Drawing.Bitmap picDecode, Form1 form) { this.picDecode = picDecode; this.form = form; } public void runMe() { //while (true) { QrDecode(picDecode); //System.Threading.Thread.Sleep(1000); } } public void QrDecode(System.Drawing.Bitmap picDecode) { try { Reader reader = new MultiFormatReader(); //MonochromeBitmapSource image = new BufferedImageMonochromeBitmapSource(new Bitmap(Image.FromFile("barcode.jpg")), false); RGBLuminanceSource source = new RGBLuminanceSource(picDecode, picDecode.Width, picDecode.Height); // BinaryBitmap bitmap = BinaryBitmap image = new BinaryBitmap(new HybridBinarizer(source)); Result result = (Result)reader.decode(image); string text = result.Text; BarcodeFormat format = result.BarcodeFormat; ResultPoint[] points = result.ResultPoints; Console.WriteLine("barcode text: {0}", text); //Console.WriteLine("raw bytes: {0}", rawbytes); Console.WriteLine("format: {0}", format); Console.ReadLine(); form.Invoke(new Form1.decodeValue(form.setTextBox), new object[] { System.Text.Encoding.UTF8.GetString(System.Text.Encoding.GetEncoding("SJIS").GetBytes(text)), false }); } catch (com.google.zxing.ReaderException ex) { form.Invoke(new Form1.decodeValue(form.setTextBox), new object[] { "error",true }); return; } } }
原始碼:
執行檔 | 原始碼 |
Pages: 1 2
版主您好:
版主所發布的這篇剛好與我現在作的論文有關,不知是否可請版主提供開發環境。
謝謝您~
windows xp
visual express c#
net. framework 2.0的樣子…
請問一下這個掃描器
用webcam拍攝
由於我用在手機上
手機上的qrcode不是有個定位的方塊
產生的方塊大小如何改變
想把定位方快變大 有辦法嗎
製作qrcode的方法是從大大上一篇產生qrcode出來的^^
其實那個方塊是個假像而已…
只是利用一個遮色片遮在那裡而已…
並不會真的影響解碼能力
this.textBox1.Text = “checking”;
System.Drawing.Bitmap img = new System.Drawing.Bitmap(this.pictureBox1.Image, this.pictureBox1.Image.Size);
thread1 obj = new thread1(img, this);
System.Threading.Thread t = new System.Threading.Thread(obj.runMe);
t.Start();
上面段source code 是放在哪的??
我用eclipse 可以用這段code嗎??
以上 2段應該放在哪??
可以用eclipse 運作嗎??
他的code lib是給csharp用的,如果你有裝eclipse的csharp開發環境是可以用的,否則則不行
版主您好:
我想請問關於QRcode解碼的部份是否有C/C++的範例程式,或有可以更改輸入跟輸出方式的解碼範例,因為已經蒐尋很久實在找不到,所以想求助於版主,我的開發環境是Visual Studio 2008。
http://code.google.com/p/zxing/ zxing裡面包含各種程式語言的解碼器實作你可以參考看看
你好啊,那是不是,ENCODE跟DECODE都是一套用C#的語言寫的?!
其實不一定的….zxing他就提供多種程式語言的方式decode跟encode,你可以參考看看
或著如果怕麻煩的話直接取用它complier好的dll,用程式呼叫dll指令也是可以的
vCard 可以用WEBCAM scan嗎?scan其他可以,但vCard 是error??
加我的msn ok?? (就是那個email,,我是香港的)
vcard是可以的,它其實也是內存一個文字而已,利用tag指定其欄位意義
你可以看這篇有VCARD的格式
http://blog.yslifes.com/archives/686
版主你好:
請問該如何在thread1的class外(form1的class裡面)取得他解碼出來的文字呢?
版主你好:
請問如何在thread1的class外面(form1的class裡面)取得解碼出來的字串呢?
你把解碼出來的東西set回去form裡的一個變數…然後再呼叫invoke去顯示在畫面上
版主你好:
請問有沒有方法可以得知被分析的qrcode是位於圖片中的何處呢?
可否寄您上面這程式的源碼給我參考~~謝謝
@Kevin,
第二頁有喔
http://blog.yslifes.com/archives/841/2
版主你好,執行檔與原始碼連結已經失效了,可否補上 謝謝
@Wei,
已補上
版主您好,請問您有在Win10下執行過嗎?
我依照這個方法在開發環境Win7筆電下可以使用,
但是拿到測試的Win10平板上,就無法開啟WebCam
按下”Start”後出現錯誤訊息如下:
An error ocurred while capturing the video image. The video capture will now be terminated.
並未將物件參考設定為物件的執行個體
請問是否有解??
麻煩您了!
不好意思,我並沒有測試過windows 10喔
如果您有找到解決方法,再請您告知,
謝謝
您好 ,請問可以用WebCam掃描一維條碼嗎
可以
版主您好,我使用您的程式修改成解析一維條碼,
您程式內的舊版zxing.dll 不支援解析Code 93,
新版的ZXing.Net.0.16.4.0有支援,新舊版的參數差異為RGBLuminanceSource,
需將System.Drawing.Bitmap轉換為 byte[],
我加入了函式 byte[] GetRGBValues,程式加入這個函式之後變得很難掃描條碼,
且目前掃描出來的數字並不是正確的,還會辨識成錯誤格式
請問版主,我是否在轉換的過程出了什麼問題呢?
還是說新版的還要另外解析WebCam的圖檔呢?
麻煩您了,謝謝!
版主您好,我成功將您的程式碼修改成可辨識一維條碼。
但目前遇到一個問題,Code 93 無法辨識。
查詢了相關資訊,發現版主使用的舊版zxing.dll未支援Code 93
下載了新版的ZXing.Net.0.16.4.0,並且載入dll檔執行,
遇到的問題為須將System.Drawing.Bitmap轉換為 byte[]
ZXing.LuminanceSource source = new RGBLuminanceSource(GetRGBValues(picDecode), picDecode.Width, picDecode.Height);
但目前掃描出來的數字並不是正確的,新舊版的參數差異為RGBLuminanceSource,
我加入了函式 byte[] GetRGBValues,
private byte[] GetRGBValues(System.Drawing.Bitmap picDecode)
{
// Lock the bitmap’s bits.
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, picDecode.Width, picDecode.Height);
System.Drawing.Imaging.BitmapData bmpData = picDecode.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, picDecode.PixelFormat);
// Get the address of the first line.
IntPtr ptr = bmpData.Scan0;
// Declare an array to hold the bytes of the bitmap.
int bytes = bmpData.Stride * picDecode.Height;
byte[] rgbValues = new byte[bytes];
// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
picDecode.UnlockBits(bmpData);
return rgbValues;
}
請問版主,我是否在轉換的過程出了什麼問題呢?
程式加入這個函式之後變得很難掃描條碼,
還是說新版的還要另外解析webcam的圖檔呢?
麻煩您了,謝謝!
版主您好,舊版的zxing.dll沒有支援Code 93
但使用新版的ZXing.dll無法解析條碼
請問您有什麼建議嗎
謝謝