2012-04-12 35 views
5

Tôi đã thành công khi sử dụng thư viện quét mã vạch ZXing, nhưng chỉ ở chế độ ngang.thư viện quét mã vạch android + ZXing - kích thước và hướng tùy chỉnh

Tôi cũng đã thiết lập thành công chế độ xem trước máy ảnh ở chế độ dọc và hiển thị chính xác (không kéo dài), nhưng giờ đây mã vạch không hoạt động. here're những thay đổi tôi đã thực hiện cho "setDesiredCameraParameters" on "CameraConfigurationManager.java" để hiển thị các máy ảnh một cách chính xác:

void setDesiredCameraParameters(Camera camera) 
{ 
    Camera.Parameters parameters = camera.getParameters(); 
    Log.d(TAG, "Setting preview size: " + cameraResolution); 
    setFlash(parameters); 
    setZoom(parameters); 
    camera.setDisplayOrientation(90); 
    parameters.set("rotation", 90); 
    parameters.setPreviewSize(cameraResolution.y, cameraResolution.x); 
    camera.setParameters(parameters); 
} 

tôi đã thử một số các giải pháp được đề cập trên những nơi khác, nhưng hoặc là họ don 't làm việc, hoặc họ làm việc nhưng không thể hiển thị xem trước máy ảnh một cách chính xác. ví dụ: How to use Zxing in portrait mode? http://code.google.com/p/zxing/issues/detail?id=178#c46 https://github.com/pplante/zxing-android/issues

khi tôi đang hoàn thành với điều đó, tôi cũng cần phải tùy chỉnh kích thước vị trí & của hình chữ nhật để quá trình quét. tôi biết rằng tôi cần phải thay đổi "setManualFramingRect" trên "CameraManager.java", nhưng tôi không chắc chắn nếu tôi làm điều đó một cách chính xác. đây là đoạn code cho rằng:

public void setManualFramingRect(Rect rect) 
{ 
    if (initialized) 
    { 
     Point screenResolution = configManager.getScreenResolution(); 
     if (rect.right >= screenResolution.x) 
      rect.right = screenResolution.x - 1; 
     if (rect.left < 0) 
      rect.left = 0; 
     if (rect.bottom >= screenResolution.y) 
      rect.bottom = screenResolution.y - 1; 
     if (rect.top < 0) 
      rect.top = 0; 
     framingRect = rect; 
     Log.d(TAG, "Calculated manual framing rect: " + framingRect); 
     framingRectInPreview = null; 
    } 
    else 
     _requestedFramingRect = new Rect(rect); 
} 

tất nhiên, tôi đã thay đổi "openDriver" để gọi:

if (_requestedFramingRect != null) 
    setManualFramingRect(_requestedFramingRect); 

hãy giúp tôi.


EDIT: bây giờ tôi đã phát hiện ra rằng nó không hoạt động trên một số thiết bị. nó bị treo ngay từ đầu và nếu bạn gỡ lỗi, bạn có thể thấy rằng ngay cả bản xem trước cũng không hoạt động tốt.

+1

tôi nghĩ bài đăng tiếp theo có thể trả lời câu hỏi của tôi: http://stackoverflow.com/questions/16252791/how-to-show-zxing-camera-in-portrait-mode-android/16252917#16252917. Tuy nhiên, vì đã có một thời gian dài kể từ khi tôi đã thử nghiệm thư viện zxing, tôi không biết nó hoạt động tốt như thế nào. –

Trả lời

2

Có nhiều điều hơn thế này. Ví dụ bạn cần thực sự "xoay" dữ liệu máy ảnh (hoặc quét nó như thể nó dọc) khi hướng máy ảnh không giống như hướng thiết bị. Và khi sử dụng camera trước, bạn cần tính đến thực tế là xoay vòng của nó bị đảo ngược.

+0

tôi đã thử liên kết tôi đã viết - nó không hoạt động. bạn có biết một người đã thành công khi làm việc đó không? –

+0

Vâng, tôi đã làm: https://play.google.com/store/apps/details?id=com.srowen.bs.android –

+0

tôi cũng có nghĩa là nếu có ai có thể chia sẻ giải pháp cho vấn đề này (không có chi phí). :) –

Các vấn đề liên quan