سؤال

لدي تطبيق C ++ الذي يتواصل مع الكاميرا ويجلب بيانات الصورة الخام. ثم لدي بايت [] في C ++، والتي أريد إرسالها إلى Java مع JNI.

ومع ذلك، أحتاج إلى تحويل البايت الخام [] إلى تنسيق ملف حقيقي (.BMP كان خياري الأول). يمكنني القيام بذلك بسهولة إذا أكتبها من C ++ إلى ملف على محرك الأقراص الثابت، باستخدام BitmapFileInfo و Bitmapheaderinfo، لكنني لا أعرف كيف سيدور المرء عن إرسال التنسيق بالكامل إلى Java.

ثم فكرت في إرسال بيانات البايت الخام فقط [] باستخدام JNI ثم تحويلها إلى .bmp، لكن لا يمكنني العثور على أي مكتبة جيدة للقيام بذلك في Java.

ماذا سيكون خياري الأفضل؟ تحويل الصورة في C ++ ثم إرسالها باستخدام JNI أو أرسل البيانات الأولية إلى Java ثم تحويله إلى .bmp؟ كيف يمكنني أسهل تحقيق هذا؟

هل كانت مفيدة؟

المحلول

إنه سطرين فقط في Java 1.5:

BufferedImage image = ImageIO.read( new ByteArrayInputStream( byteArray ) );
ImageIO.write(image, "BMP", new File("filename.bmp"));

يعرف Java (على Windows) كيفية تصدير JPG و PNG و BMP بقدر ما أعرف.

نصائح أخرى

ليست هناك حاجة للقيام بأي من ذلك. قم بتشغيل صفيف البايت إلى Inputstream وإطعام ذلك إلى ImageIO.Read ()؛

public Image getImageFromByteArray(byte[] byteArray){
    InputStream is = new ByteArrayInputStream(byteArray);
    return ImageIO.read(is);
} 

يؤدي هذا إلى إنشاء كائن صورة من صفيف البايت الخاص بك، والذي يتم عرضه بعد ذلك بالفعل داخل مكون واجهة المستخدم الرسومية. إذا كنت ترغب في حفظه، يمكنك استخدام فئة ImageOI أيضا لذلك أيضا.

public void saveImage(Image img, String fileFormat, File f){
    ImageIO.write(img, fileFormat, f);
}

إذا كنت تعرف كيفية الكتابة كما .bmp إلى ملف، ثم يمكنك استخدام (تقريبا) نفس التعليمات البرمجية للكتابة في مخزن مؤقت للذاكرة بدلا من ذلك. أن مخزن الذاكرة المخزن المؤقت يمكنك الشحن إلى Java، ولديك فك تشفير شكل مثل stroboskop أو markus koivisto المذكورة. إذا قمت بتحرير سؤالك لتضمين الطريقة التي تكتب فيها البيانات إلى .bmp ملف، يمكن أن أقترح كيفية تحويل ذلك إلى عملية في الذاكرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top