2013-02-10 28 views
5

में प्रभावी छवि क्रॉपिंग मैं जावाएफएक्स का आंशिक रूप से आरा पहेली लिखने की कोशिश कर रहा हूं क्योंकि किसी ने मुझसे पूछा और आंशिक रूप से क्योंकि मैं जावाएफएक्स को जाना चाहता हूं। हालांकि, मुझे छवि की वास्तविक फसल के साथ कठिनाई हो रही है।जावाएफएक्स

विचार यह है कि उपयोगकर्ता छवि को छोटा टुकड़ों में काटने के लिए छवि और कार्यक्रम की आपूर्ति करे। सरल, सही? मेरी समस्या यह है:

ImageView imgageView = new ImageView(); // Creates a new ImageView; this will be a single puzzle piece. 
imgageView.setImage(originalImage); // Use the original image as the "base." 
Rectangle2D rectangle = new Rectangle2D(0, 0, 50, 50); // Crop the image from (0,0) to (50, 50). 

बस अंतिम पंक्ति स्पष्ट करने के लिए: एक ही रास्ता मैं छवि में कटौती के लिए मिल सकता है छवि वस्तु की एक प्रतिलिपि बनाने और कॉपी के दृश्य भाग बदलने के लिए है, यहाँ एक उदाहरण है , यहाँ है related piece in the API:

public Rectangle2D(double minX, 
      double minY, 
      double width, 
      double height) 
Creates a new instance of Rectangle2D. 
Parameters: 
minX - The x coordinate of the upper-left corner of the Rectangle2D 
minY - The y coordinate of the upper-left corner of the Rectangle2D 
width - The width of the Rectangle2D 
height - The height of the Rectangle2D 

अब इस ठीक है अगर मैं (खेल युवा बच्चों के लिए है) चार या नौ टुकड़ों में चित्र में कटौती कर रहा हूँ, लेकिन क्या है अगर मैं एक अच्छा में चित्र में कटौती करना चाहते हैं 1200 टुकड़ा पहेली? क्या इसका परिणाम बेहद महंगी ऑपरेशन नहीं होगा? न केवल खुद को फसल, बल्कि स्मृति की छवियों की कई प्रतियों को याद रखने के लिए। देखें, अगर मैं इसे सही ढंग से समझ रहा हूं तो प्रत्येक टुकड़े में पूरी मूल छवि शामिल होगी जिसमें इसका एक बड़ा हिस्सा होगा जो "छुपा" रहेगा।

क्या मैं बस फ़ंक्शन को गलत समझ रहा हूं? यदि नहीं, तो ऐसा करने का एक बेहतर तरीका होना चाहिए, है ना?

उत्तर

11

पिक्सेल रीडर और लिखने योग्य छवि का उपयोग करने में मदद करनी चाहिए।

निम्नलिखित position (x,y) पर एक पुराने एक से एक नई छवि कटौती और size (width, height)

PixelReader reader = oldImage.getPixelReader(); 
WritableImage newImage = new WritableImage(reader, x, y, width, height); 
+0

उत्तर के लिए धन्यवाद, मैं वास्तव में इस प्रश्न के बारे में सब भूल गया हूं। – NotMyName

9

एकाधिक imageView वस्तुओं एक ही छवि संदर्भित कर सकते हैं। छवि के लिए डेटा छवि में ही संग्रहीत किया जाता है। यदि आपके पास एक ही छवि का संदर्भ देने वाले प्रत्येक 1000 छवि दृश्य वस्तुएं हैं तो स्मृति में पिक्सेल की केवल 1 प्रति है। WriteableImage का उपयोग करके प्रतियां बनाना वास्तव में एकाधिक छवि दृश्य वस्तुओं की तुलना में अधिक महंगा होगा।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^