मैं कच्चे नमूनों से BufferedImage प्राप्त करने का प्रयास कर रहा हूं, लेकिन मुझे उपलब्ध डेटा सीमा से पहले पढ़ने की कोशिश करने के बारे में अपवाद मिलते हैं जिन्हें मैं समझ नहीं पा रहा हूं। मुझे क्या करना कोशिश कर रहा हूँ है:कच्चे डेटा से BufferedImage कैसे बनाएं
val datasize = image.width * image.height
val imgbytes = image.data.getIntArray(0, datasize)
val datamodel = new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, image.width, image.height, Array(image.red_mask.intValue, image.green_mask.intValue, image.blue_mask.intValue))
val buffer = datamodel.createDataBuffer
val raster = Raster.createRaster(datamodel, buffer, new Point(0,0))
datamodel.setPixels(0, 0, image.width, image.height, imgbytes, buffer)
val newimage = new BufferedImage(image.width, image.height, BufferedImage.TYPE_INT_RGB)
newimage.setData(raster)
दुर्भाग्य से मैं मिलता है:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 32784
at java.awt.image.SinglePixelPackedSampleModel.setPixels(SinglePixelPackedSampleModel.java:689)
at screenplayer.Main$.ximage_to_swt(Main.scala:40)
at screenplayer.Main$.main(Main.scala:31)
at screenplayer.Main.main(Main.scala)
डेटा है मानक आरजीबी 1 बाइट गद्दी के साथ (ताकि 1 पिक्सेल == 4 बाइट्स) और छवि का आकार 1366x24 पीएक्स है।
मुझे अंततः नीचे दिए गए सुझाव के साथ चलाने के लिए कोड मिला। अंतिम कोड है:
val datasize = image.width * image.height
val imgbytes = image.data.getIntArray(0, datasize)
val raster = Raster.createPackedRaster(DataBuffer.TYPE_INT, image.width, image.height, 3, 8, null)
raster.setDataElements(0, 0, image.width, image.height, imgbytes)
val newimage = new BufferedImage(image.width, image.height, BufferedImage.TYPE_INT_RGB)
newimage.setData(raster)
यह सुधार किया जा सकता है, तो मैं निश्चित रूप से सुझाव के लिए खुले हूँ, लेकिन सामान्य रूप में यह अपेक्षा के अनुरूप काम करता है।
मैंने उन समाधानों की कोशिश की, लेकिन या तो मुझे असंबंधित कचरा, या एक ब्लैक स्क्रीन मिलती है। यदि मैं हेक्स डंप को देखता हूं तो डेटा सही होता है। क्या आप एक छोटा टुकड़ा प्रदान कर सकते हैं जो वास्तव में इम्बिबाइट्स से बुफर्ड इमेज तक जाता है? यह वास्तव में सराहना की जाएगी :) – viraptor
यदि आप कोड प्रदान कर सकते हैं जो आपके उदाहरण में 'छवि' बनाता है, तो सुनिश्चित करें। या यदि आपको परवाह नहीं है कि डेटा कैसे आता है, तो मैं एक उदाहरण बनाउंगा जो किसी छवि से नहीं है। –
यह एक कस्टम ऑब्जेक्ट है जो मैं सीधे एक्सर्ग से मिलता हूं। यदि आप इसे 'ऊंचाई', 'चौड़ाई' और 4 बाइट घटकों (आरजीबी ऑर्डर + 1byte पैडिंग), या प्रत्येक पिक्सेल प्रति सिंगल इंट (समान प्रारूप) के सरणी के साथ कर सकते हैं, तो मैं बाकी को समझ सकता हूं। जिस भाग में मैं असफल हूं वह शायद बफर <-> रास्टर इंटरैक्शन है (मुझे यह भी सुनिश्चित नहीं है कि दोनों की आवश्यकता है)। बहुत बहुत धन्यवाद। – viraptor