में आरजीबी डेटा की तेज़ लोडिंग और ड्राइंग विंडोज़ पर चल रहे कुछ जावा कोड में, मैं डिस्क से आरजीबी डेटा के कुछ बड़े ब्लॉक पढ़ रहा हूं और इसे जितनी जल्दी हो सके स्क्रीन पर प्रदर्शित करना चाहता हूं। आरजीबी डेटा बिना किसी अल्फा के 8 चैनल प्रति चैनल है। वर्तमान में मेरे पास BufferedImage बनाने के लिए निम्न जैसे कोड हैं।BufferedImage
BufferedImage getBufferedImage(File file, int width, int height) {
byte[] rgbData = readRGBFromFile(file);
WritableRaster raster = Raster.createInterleavedRaster(
rgbData, width, height,
width * 3, // scanlineStride
3, // pixelStride
new int[]{0, 1, 2}, // bandOffsets
null);
ColorModel colorModel = new ComponentColorModel(
ColorSpace.getInstance(ColorSpace.CS_sRGB),
new int[]{8, 8, 8}, // bits
false, // hasAlpha
false, // isPreMultiplied
ComponentColorModel.OPAQUE,
DataBuffer.TYPE_BYTE);
return new BufferedImage(colorModel, raster, false, null);
}
समस्या यह है कि स्क्रीन पर इसे प्रस्तुत करने का प्रदर्शन बहुत धीमा है। लगभग 250 - 300 एमएस। मैंने पढ़ा है कि सर्वश्रेष्ठ प्रदर्शन के लिए आपको स्क्रीन के साथ संगत BufferedImage में प्रदर्शित करने की आवश्यकता है। ऐसा करने के लिए, मैं उपर्युक्त विधि से इस तरह की विधि में लौटाई गई बफरर्ड छवि पास करता हूं।
BufferedImage createCompatibleImage(BufferedImage image)
{
GraphicsConfiguration gc = GraphicsEnvironment.
getLocalGraphicsEnvironment().
getDefaultScreenDevice().
getDefaultConfiguration();
BufferedImage newImage = gc.createCompatibleImage(
image.getWidth(),
image.getHeight(),
Transparency.TRANSLUCENT);
Graphics2D g = newImage.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
return newImage;
}
विधि अनिवार्य रूप से विंडोज पर ARGB लिए आरजीबी से बदल देता है और यह वास्तव में प्रदर्शित करने को गति है, लेकिन इस पद्धति एक 1600 x 1200 आरजीबी डेटा ब्लॉक के लिए ~ 300 एमएस लेता है यही कारण है कि। तो अब मैंने मूल रूप से ड्राइंग समस्या के प्रदर्शन हिट को एक कनवर्टिंग समस्या में व्यापार किया है।
300ms डिस्क के आरजीबी डेटा को लोड करने के लिए लगभग उसी समय होता है। मुझे लगता है कि मैं कुछ तेज कर सकता था।
क्या कोई बेहतर तरीका है कि मैं रूपांतरण कर सकता हूं? या अगर मैं आरजीबी डेटा संशोधित करता हूं और पहले से ही अल्फा चैनल जोड़ता हूं तो इससे मदद मिलेगी? यदि ऐसा है तो मेरा रास्टर और कलरमोडल कैसा दिखता है। साथ ही, चूंकि मेरे आरजीबी डेटा में पारदर्शिता नहीं है, क्या मुझे पूर्व गुणा अल्फा या कुछ का उपयोग करके कोई प्रदर्शन सुधार मिल सकता है?
क्षमा करें, थोड़ा मैं इस कलरमोडेल, रास्टर सामान पर थोड़ा खो गया हूं।
धन्यवाद!
2 सुझाव: 1) स्रोत में 'compatabile' ->' संगत 'बदलें। 2) अपने उत्तर को 'सही' के रूप में चिह्नित करें। –
+1 ... मैं यह उल्लेख करने जा रहा था कि कलरमोडेल मंदता वास्तव में सबकुछ धीमा कर देती है (कुछ ओएस एक्स संस्करणों पर मैग्नीट्यूड के ** 3 ऑर्डर ** तक, हाँ, 1000 गुना धीमी ** ** ** प्रदान करता है और प्रदान करता है मूल रूप से कुछ नहीं (गंभीरता से, जावा में लिखी गई कितनी पेशेवर छवि/वीडियो हेरफेर संपादन वहाँ बाहर है? यह सही है, शून्य ...) * int [] * के साथ सीधे काम करने की तुलना में। यह एक और मामला है * "ज़ूम हमारे पास ऑब्जेक्ट्स हैं, चलो ओवरथिंक करें और किसी भी कारण से सब कुछ ओवरवॉप करें" *। * int [] * जीत के लिए आदिम हेरफेर: इस तरह गति को चिंता होने पर आपको ऐसा करना होगा। – SyntaxT3rr0r
हां मेरी गति लगभग 300ms से 15ms से कम हो गई। – awinbra