2011-06-11 8 views
5

मैं एक गेम लिखकर एंड्रॉइड सीख रहा हूं और ग्राफिक्स एपीआई में समस्या है।सीमा के साथ कैनवास में वर्तमान क्लिप पर बिटमैप बनाएं (पेंट)

मैं एक छवि को पथ के आकार में खींचना चाहता हूं और फिर पथ पर सीमा जोड़ना चाहता हूं। मैं पथ के साथ छवि को क्लिप करने में सक्षम था लेकिन उस पर सीमा जोड़ने का कोई तरीका नहीं मिला। हालांकि यह आसान होगा क्योंकि एपीआई कैनवास.draw * विधियों पर पेंट ऑब्जेक्ट का समर्थन करता है।

अद्यतन

मूल प्रश्न में, मेरा पथ दो आयतों में शामिल है और @ क्रिस्टोफर-souvey सही ढंग से जवाब दे दिया। हालांकि, एक और क्लिपपैथ() विधि जोड़ने से निपटने पर मुझे एक और समस्या मिलती है।

मैंने पथ में एक और सर्कल जोड़कर पिछले कोड को अपडेट किया।

Bitmap srcImage = BitmapFactory.decodeStream(getAssets().open("panda.jpg")); 
Bitmap bitmapResult = Bitmap.createBitmap(srcImage.getWidth(), srcImage.getHeight(), Bitmap.Config.ARGB_8888); 
Path path = new Path(); 

// This is my border 
Paint paint = new Paint(); 
paint.setStyle(Style.STROKE); 
paint.setColor(Color.RED); 
paint.setStrokeWidth(2); 
paint.setAntiAlias(true); 

Canvas canvas = new Canvas(bitmapResult); 

// Overlay two rectangles 
path.addRect(10, 10, 70, 70, Path.Direction.CCW); 
path.addRect(40, 40, 120, 120, Path.Direction.CCW); 
canvas.drawPath(path , paint); 
canvas.clipPath(path, Region.Op.INTERSECT); 

path.reset(); 
path.addCircle(40, 80, 20, Path.Direction.CCW); 
canvas.drawPath(path , paint); 
canvas.clipPath(path, Region.Op.DIFFERENCE); 

// The image is drawn within the area of two rectangles and a circle 
// Although I suppose that puting Paint object into drawBitmap() method will add a red border on result image but it doesn't work 
canvas.drawBitmap(srcImage, 0, 0, paint); 

((ImageView)this.findViewById(R.id.imageView1)).setImageBitmap(bitmapResult); 

यहाँ मेरी कोड से परिणाम है:: यह मेरा नया कोड है http://i.stack.imgur.com/8j2Kg.png

और यह मैं क्या उम्मीद है: http://i.stack.imgur.com/iKhIr.png

मैं इसे काम करने के लिए कुछ भी याद आती है है?

+0

drawBitmap में पेंट तत्व सीमा रंग नहीं है: http://developer.android.com/reference/android/graphics/Canvas.html#drawBitmap(android.graphics.Bitmap, android.graphics.Matrix, android। ग्राफिक्स.पेंट) –

+0

हम पेंट के साथ drawRect(), drawCircle() के साथ सीमा बना सकते हैं। यह drawBitmap() –

उत्तर

1

drawBitmap के बाद canvas.drawPath(path, paint) उपयोग करने का प्रयास आप क्लिप और canvas.restore drawPath से पहले (मुझे यकीन है कि अगर स्ट्रोक के अंदर या पथ लाइनों के बाहर होता है नहीं कर रहा हूँ) से पहले एक canvas.save में डालने के लिए हो सकता है।

+1

के लिए कैसे काम नहीं करता है बस जानकारी के लिए, स्ट्रोक पथ रेखाओं के बाहर होता है –

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