मुझे ब्लैक सीमाओं के अंदर एक छवि के रंग पिक्सल के लिए बाढ़ भरने वाले एल्गोरिदम लिखने की आवश्यकता है। मैंने लिखा गया है इतने पर कुछ पोस्ट यहाँ के आधार पर निम्न:जावा फ्लड समस्या
private Queue<Point> queue = new LinkedList<Point>();
private int pickedColorInt = 0;
private void floodFill(Pixmap pixmap, int x, int y){
//set to true for fields that have been checked
boolean[][] painted = new boolean[pixmap.getWidth()][pixmap.getHeight()];
//skip black pixels when coloring
int blackColor = Color.rgba8888(Color.BLACK);
queue.clear();
queue.add(new Point(x, y));
while(!queue.isEmpty()){
Point temp = queue.remove();
int temp_x = temp.getX();
int temp_y = temp.getY();
//only do stuff if point is within pixmap's bounds
if(temp_x >= 0 && temp_x < pixmap.getWidth() && temp_y >= 0 && temp_y < pixmap.getHeight()) {
//color of current point
int pixel = pixmap.getPixel(temp_x, temp_y);
if (!painted[temp_x][temp_y] && pixel != blackColor) {
painted[temp_x][temp_y] = true;
pixmap.drawPixel(temp_x, temp_y, pickedColorInt);
queue.add(new Point(temp_x + 1, temp_y));
queue.add(new Point(temp_x - 1, temp_y));
queue.add(new Point(temp_x, temp_y + 1));
queue.add(new Point(temp_x, temp_y - 1));
}
}
}
}
यह अपेक्षा के अनुरूप काम नहीं करता है। उदाहरण के लिए, निम्नलिखित परीक्षण छवि पर:
यादृच्छिक आयताकारों को रिक्त किया जाएगा जहां मैंने क्लिक किया है। उदाहरण के लिए, बैंगनी आयताकार के नीचे कहीं भी क्लिक करना बैंगनी आयत को दोहराएगा। बैंगनी आयताकार के अंदर क्लिक करने से हरे आयत को याद किया जाता है। मैंने इसे चेक किया है और मैं विधि के लिए सही पैरामीटर पास कर रहा हूं ताकि समस्या शायद मेरे लूप के अंदर कहीं हो।
मुझे लगता है कि आप सही पैरामीटर में * नहीं * गुजर रहे हैं। ऐसा लगता है जैसे आपका वाई समन्वय गलत है, क्योंकि आप जिस कुछ समन्वय प्रणाली का उपयोग कर रहे हैं वह वाई-अप है और दूसरा वाई-डाउन है। Y y = pixmap.getHeight() - y' को उलटा करने के लिए अपनी विधि की शुरुआत में कोशिश करें। – noone
वाह, जिसने मेरे दिमाग को भी पार नहीं किया। यह एक libGDX प्रोजेक्ट है जहां उदाहरण के लिए दृश्य निर्देशांक, sprites, आयत और इसी तरह की वस्तुओं में निचले बाएं में एक (0, 0) समन्वय होता है। लेकिन मुझे लगता है कि पिक्समैप (0, 0) के लिए शीर्ष बाएं का उपयोग करता है। धन्यवाद! –
क्या इससे आपकी समस्या हल हो गई? अगर ऐसा होता है, तो मैं इसे एक उत्तर के रूप में लिखूंगा, इसलिए यह अनुत्तरित नहीं दिखाई देगा। – noone