2009-07-16 41 views

Trả lời

26

Mercer - không, cũng có một bộ mã hóa trong thư viện. com.google.zxing.qrcode.encoder. Chúng tôi cung cấp rằng ngoài ứng dụng web mẫu sử dụng API biểu đồ của Google

+0

ok cảm ơn bạn! tôi chỉ cần tạo một hình ảnh bằng cách sử dụng qrCode.getMatrix(). getArray(); – oneeyejack

+7

Trong trường hợp bất cứ ai khác đang làm điều này, thì đó là ý tưởng cơ bản. Sử dụng Encoder.encode() để 'điền vào' các chi tiết của một QRCode mới được tạo ra. Sau đó lấy byte [] [] từ QRCode.getMatrix(). GetArray() như đã đề xuất ở trên. Mỗi dòng byte có vẻ là một hàng pixel cho QRCode, với mỗi byte là 0 hoặc 1. Tại thời điểm này, bạn chỉ có thể vẽ các pixel vào BufferedImage hoặc tạo một Raster ra khỏi nó hoặc một cái gì đó để biến nó thành một hình ảnh AWT. – CarlG

+11

... hoặc sử dụng lớp MatrixToImageWriter được cung cấp để thực hiện tất cả điều này cho bạn! –

14

ZXing là một thư viện xử lý hình ảnh mã vạch 1D/2D mã nguồn mở, đa định dạng được triển khai trong Java. Nó được phát hành theo Giấy phép Apache, vì vậy nó cho phép sử dụng mã nguồn để phát triển phần mềm sở hữu độc quyền cũng như phần mềm nguồn mở và miễn phí.

+1

Không tạo mã QR. Nó chỉ quét chúng. –

+2

Trong ví dụ ứng dụng web của máy phát điện qr, chúng đang sử dụng http://code.google.com/apis/chart/types.html#qrcodes để tạo mã qr. –

+0

Tôi không thể truy cập web từ dự án như vậy, không có API Google hoặc dịch vụ web. – oneeyejack

2

MatrixToImageWriter sử dụng BitMatrix, không phải ByteMatrix như được trả về bởi QRCode.getMatrix. bằng cách xem mã nguồn của android, tôi đã tìm thấy bằng chứng giải pháp khái niệm sau:

try { 
     MultiFormatWriter writer = new MultiFormatWriter();  
     Hashtable hints = new Hashtable(); 
     hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.Q);    
     MatrixToImageWriter.writeToFile(writer.encode("hello world", BarcodeFormat.QR_CODE, 800, 800, hints), 
             "png", new File("/tmp/qrcode.png")); 
    } catch (Exception e) { 
     System.out.println("failure: " + e); 
    } 

btw áp đặt Hashtable trong API không sạch. hãy sử dụng Bản đồ. không nhiều người vẫn còn sử dụng Hashtable anyway, bạn nên hầu như luôn luôn sử dụng HashMap thay vì (ngoại trừ một vài trường hợp sử dụng).

+0

Trả lời nhận xét rất cũ này tôi vừa thấy: nó đã sử dụng 'Hashtable' để tương thích với J2ME, không có' Bản đồ'. Nhưng vì v2.0 hỗ trợ J2ME đã bị loại bỏ và API lấy một 'Bản đồ'. –