2010-10-02 19 views
32

संभव डुप्लिकेट:
How to crop the parsed image in android?एंड्रॉइड में एक छवि कैसे फसल करें?

मैं अपने रेस/drawable फ़ोल्डर में एक छवि है और मैं फसल चाहते हैं (यानी छवि का कुछ हिस्सा बाहर काट) छवि जब लोड हो रहा है यह एक छवि दृश्य में है। हालांकि मुझे यकीन है कि यह कैसे करना है, कोई सुझाव?

+0

लिंक किए गए प्रश्न का उत्तर फसल कैसे करें, इसका उत्तर न दें, कृपया इसे पढ़ें। – m0skit0

उत्तर

6

आप समान रूप से छवि के बाहर फसल के लिए चाहते हैं, तो आप बाहर ScaleType विशेषता एक imageView लिए जाँच करनी चाहिए: http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

विशेष रूप से, आप "centerCrop" विकल्प में रुचि होगी। यह छवि के हिस्से को बाहर निकाल देता है जो परिभाषित आकार से बड़ा है।

यहाँ एक्सएमएल लेआउट में ऐसा करने का एक उदाहरण है:

<ImageView android:id="@+id/title_logo" 
      android:src="@drawable/logo" 
      android:scaleType="centerCrop" android:padding="4dip"/> 
+0

इसकी इतनी मूर्खतापूर्ण उन्होंने अधिक फसल विकल्प नहीं जोड़ा, फिर केंद्र फसल ... –

3
int targetWidth = 100; 
int targetHeight = 100; 
RectF rectf = new RectF(0, 0, 100, 100);//was missing before update 
Bitmap targetBitmap = Bitmap.createBitmap(
targetWidth, targetHeight,Bitmap.Config.ARGB_8888); 
Canvas canvas = new Canvas(targetBitmap); 
Path path = new Path(); 
path.addRect(rectf, Path.Direction.CW); 
canvas.clipPath(path); 
canvas.drawBitmap(
sourceBitmap, 
new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight()), 
new Rect(0, 0, targetWidth, targetHeight), 
null); 
ImageView imageView = (ImageView)findViewById(R.id.my_image_view); 
imageView.setImageBitmap(targetBitmap); 
+1

आपने "rectf" रेक्ट को पथ सेट किया है, लेकिन इसे परिभाषित नहीं किया है। बिटमैप के केंद्र को सही तरीके से क्लिप करने के लिए आप क्लिपिंग रेक्ट के आयामों की गणना कैसे करते हैं? अर्थात। कोने से क्लिप नहीं। – MarkPowell

+0

बिटमैप.क्रेट बिटमैप का उपयोग करने का दृष्टिकोण जो स्रोत छवि लेता है, तब तक बहुत अधिक कुशल होना चाहिए जब तक आपको बिटमैप को और संशोधित करने की आवश्यकता न हो। चूंकि यह एक अपरिवर्तनीय बिटमैप बनाता है, इसलिए इसे प्रतिलिपि बनाना नहीं है। (जब तक स्रोत mutable नहीं है) –

+0

rectf क्या है? कृपया –

13

एंड्रॉयड संपर्क प्रबंधक EditContactActivity का उपयोग करता Intent("com.android.camera.action.CROP")

यह एक नमूना कोड है:

Intent intent = new Intent("com.android.camera.action.CROP"); 
// this will open all images in the Galery 
intent.setDataAndType(photoUri, "image/*"); 
intent.putExtra("crop", "true"); 
// this defines the aspect ration 
intent.putExtra("aspectX", aspectY); 
intent.putExtra("aspectY", aspectX); 
// this defines the output bitmap size 
intent.putExtra("outputX", sizeX); 
intent.putExtra("outputY", xizeY); 
// true to return a Bitmap, false to directly save the cropped iamge 
intent.putExtra("return-data", false); 
//save output image in uri 
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
+1

यदि मेरे पास एसडी कार्ड/myimage.jpg पर कोई छवि है, तो मैं यूआरआई को सीआरओपी इरादे में कैसे डाल सकता हूं ? अर्थात। मैं एसडी कार्ड/myimage.jpg छवि के एक क्षेत्र को फसल करना चाहता हूं। –

+0

# एनगुएन, क्या आपने टिप्पणी की है। –

+0

क्या आपको * मिल गया है ... –

7

कोशिश यह:

ImageView ivPeakOver=(ImageView) findViewById(R.id.yourImageViewID); 

Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.yourImageID); 
int width=(int)(bmp.getWidth()*peakPercent/100); 
int height=bmp.getHeight(); 

Bitmap resizedbitmap=Bitmap.createBitmap(bmp,0,0, width, height); 
ivPeakOver.setImageBitmap(resizedbitmap); 

डॉक्स से:

static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height) 

स्रोत बिटमैप की निर्दिष्ट उपसमूह से अपरिवर्तनीय बिटमैप देता है।

+0

गलत नहीं लगता है! फिर भी मूर्खतापूर्ण यह ImageView पर एक साधारण विशेषता के साथ नहीं किया जा सकता है, लेकिन मुझे लगता है कि यह पर्याप्त कुशल होना चाहिए। –

33

Bitmap.createBitmap से: "स्रोत बिटमैप की निर्दिष्ट उपसमूह से अपरिवर्तनीय बिटमैप रिटर्न नया बिटमैप स्रोत के रूप में एक ही वस्तु हो सकता है, या एक प्रति बनाई हो सकती है यह रूप में एक ही घनत्व के साथ आरंभ नहीं हो जाता।। मूल बिटमैप। "

इसे एक बिटमैप पास करें, और आयत को परिभाषित करें जिससे नया बिटमैप बनाया जाएगा।

// Take 10 pixels off the bottom of a Bitmap 
Bitmap croppedBmp = Bitmap.createBitmap(originalBmp, 0, 0, originalBmp.getWidth(), originalBmp.getHeight()-10); 
+1

मेरे लिए यह केवल तभी काम करता है जब मैंने 'originalBmp.getWidth() - 1' किया था। ऐसा लगता है कि सभी फसल आयामों को मूल रूप से मूल रूप से गिरना पड़ता है अन्यथा मूल वापस आ जाता है। –

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