星期五, 9月 16, 2011

zxing

zxing的Android client 端,是直接不斷的進行自動對焦的動作,然後接 Camera 的 Preview,這時候接出來的影像是 YUV 格式的,然後就直接去做判讀。所以,我當下的想法是在這邊直接去讀取一個 YUV 格式的影像檔,讀完就給 zxing decoder 去判讀,但是失敗。我認為可能是我轉換出來的 YUV 有問題。我是這樣轉換的,先用 ImageMagick 的 convert 把 png 轉成 ppm,再用 ppmtoyuv 轉成 yuv。

後來去看了 zxing 的 JavaSE client,他是用 awt 去做影像轉換,就想,可以把 awt 移植到 Android 去嗎? 上網找了一下,還真的有人做,只是後來專案就沒再開發了。

最後還是 stackoverflow 的幫忙:android - Embed Zxing library without using Barcode Scanner app,原來 zxing 裡的 Android client 測試程式裡就已經有一個 import com.google.zxing.client.androidtest.RGBLuminanceSource 可以處理這件事情,所以就先用 BitmapFactory.decodeFile 把圖檔讀出,得到 Bitmap,再把 Bitmap 丟給 RGBLuminanceSource 裡,就可以再用 new BinaryBitmap(new HybridBinarizer(source)); 得到 BinaryBitmap,decode 就可以根據這個 BinaryBitmap 取到條碼了。詳細的程式可以參考Stack Overflow 文裡的程式碼。,這裡不再摘錄。

沒有留言: