MatrixToImageWriter использует битматрикс, а не ByteMatrix, возвращенный QRCode.getMatrix. глядя на андроид исходный код, я нашел следующее доказательство концепции решения:
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);
}
кстати навязывания Hashtable в API не является чистым. используйте карту. не многие люди все равно используют Hashtable в любом случае, вы должны почти всегда использовать HashMap (за исключением нескольких случаев использования).
ОК спасибо! Мне просто нужно создать изображение с помощью qrCode.getMatrix(). getArray(); – oneeyejack
В случае, если кто-то еще это делает, это основная идея. Используйте Encoder.encode() для «заполнения» деталей недавно созданного QRCode. Затем получите байт [] [] из QRCode.getMatrix(). GetArray(), как было предложено выше. Каждая строка байтов представляет собой строку пикселей для QRCode, причем каждый байт равен нулю или одному. На этом этапе вы можете просто нарисовать пиксели в BufferedImage или сделать из него Растер или что-то, чтобы превратить его в AWT-образ. – CarlG
... или используйте предоставленный класс MatrixToImageWriter, чтобы сделать все это за вас! –