2015-11-25 9 views
5

पर पिक्सेल लिखने का सबसे तेज़ तरीका मैं javafx.scene.image.Image पर पिक्सल लिखने का सबसे तेज़ तरीका ढूंढ रहा हूं। BufferedImage की बैकिंग सरणी को लिखना बहुत तेज है। कम से कम परीक्षण छवि पर मैंने BufferedImage, WritableImage के लिए केवल ~ 20ms लिया, दूसरी तरफ ~ 100ms लिया। मैंने पहले से ही SwingFXUtils की कोशिश की लेकिन कोई भाग्य नहीं है।जावाएफएक्स: पिक्सलवाइटर

BufferedImage के लिए कोड (तेज):

BufferedImage bi = createCompatibleImage(width, height); 
WritableRaster raster = bi.getRaster(); 
DataBufferInt dataBuffer = (DataBufferInt) raster.getDataBuffer(); 

System.arraycopy(pixels, 0, dataBuffer.getData(), 0, pixels.length); 

कोड WritableImage के लिए (धीमा):

WritableImage wi = new WritableImage(width, height); 
PixelWriter pw = wi.getPixelWriter(); 
WritablePixelFormat<IntBuffer> pf = WritablePixelFormat.getIntArgbInstance(); 

pw.setPixels(0, 0, width, height, pf, pixels, 0, width); 

हो सकता है कि वहाँ एक रास्ता WritableImage के समर्थन सरणी के लिए भी लिखने के लिए है?

उत्तर

1

पिक्सेल लेखक के प्रदर्शन के लिए यह बिल्कुल महत्वपूर्ण है कि आप सही पिक्सेल प्रारूप चुनते हैं। आप देख सकते हैं कि क्या देशी पिक्सेल प्रारूप के माध्यम से

pw.getPixelFormat().getType() 

है पर मेरे Mac इस PixelFormat.Type.BYTE_BGRA_PRE है। यदि आपका कच्चा डेटा इस पिक्सेल प्रारूप के अनुरूप है, तो छवि में स्थानांतरण बहुत तेज़ होना चाहिए। अन्यथा पिक्सेल डेटा को परिवर्तित करना होगा और इसमें कुछ समय लगता है।

+0

यह प्रश्न का उत्तर नहीं देता है। पिक्सेल प्रारूप इस्तेमाल होने वाली स्रोत छवि पर निर्भर करता है। यदि आप स्रोत छवि प्रारूप से मेल खाने वाले प्रारूप का उपयोग नहीं करते हैं तो आपको रनटाइम पर अपवाद मिलेगा। – jjhavokk

+1

मुझे लगता है कि स्रोत पिक्सेल प्रारूप को अनुकूलित किया जा सकता है ताकि अधिकतम स्थानांतरण दर हासिल की जा सके। यह अक्सर तब होता है जब आप पिक्सेल सामग्री स्वयं बनाते हैं। – mipa