मेरे एप्लिकेशन में एक "फोटोबुथ" सुविधा है जो उपयोगकर्ता को कैमरे के साथ एक तस्वीर लेने की अनुमति देगी और साथ ही कैमरे के दृश्य के ऊपर एक ओवरले छवि दिखाएगी। तस्वीर लेने के बाद, मुझे फाइल सिस्टम में तस्वीर लेने के दौरान उपयोगकर्ता को क्या सहेजना है उसे सहेजने की ज़रूरत है।कैमरे के कब्जे वाले छवि के साथ छवि ओवरले सहेजें
मुझे इसका समाधान विकसित करते समय 1 बड़ी समस्या का अनुभव हुआ है: एक छवि को कैप्चर करने के लिए संगत आयाम जिसमें मैं ओवरले छवि संलग्न कर सकता हूं जिसके परिणामस्वरूप उपयोगकर्ता ने तस्वीर लेने के दौरान देखा था।
ऐसा लगता है कि मैं परिभाषित आयामों के साथ कैमरे से एक छवि कैप्चर नहीं कर सकता (मुझे मूल रूप से उनकी सूची से चुनना है)। कुछ फोन केवल कुछ आयाम उत्पन्न कर सकते हैं।
चूंकि मैं कैप्चर की गई छवि का आकार नहीं चुन सकता, ऐसा लगता है कि मुझे ओवरले छवि के कई अलग-अलग आकार शामिल करने की आवश्यकता होगी, और कैप्चर की गई छवि पर सबसे अच्छा मिलान संलग्न करना होगा। मैं कैमरे की छवि के शीर्ष पर किसी पुराने ओवरले को थप्पड़ मार नहीं सकता और इसे सही दिखता हूं।
सवाल:
- मैं इस "कैमरा छवि + ओवरले छवि रचना" प्रक्रिया खत्म हो-उलझी हूँ?
- कई अलग-अलग आकार ओवरले छवियों को शामिल किए बिना इस कार्य को पूरा करने में आपके पास क्या सुझाव हैं?
संपादित करें: यहां मेरा समाधान (संक्षिप्त) है। कृपया महसूस करें कि यह करने के लिए यह एक सही और शायद सबसे प्रभावी तरीका नहीं है, लेकिन यह काम करता है। कुछ चीजें अनावश्यक/अनावश्यक हो सकती हैं लेकिन जो भी हो!
नोट्स:
- इस टेबलेट डिवाइस पर भी महान काम नहीं करता।
- ओवरले छवि लैंडस्केप मोड में होने की
- ओवरले आकार 480x320
- है (यहां तक कि आप छवि चित्र में फोन पकड़े उठाएंगे हालांकि) अगर आप लैंडस्केप मोड, जबकि करने के लिए गतिविधि के लिए मजबूर करने की जरूरत है घुमाया जा करने की जरूरत है तस्वीर लेने (अब ओवरले अपने चित्र की तरह लग रहा है!)
- मैं ओवरले छवि
addContentView(overlayImageView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
... का उपयोग कर दृश्य जोड़ने
final Camera.PictureCallback jpegCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap mutableBitmap = null;
try {
//for a PORTRAIT overlay and taking the image holding the phone in PORTRAIT mode
mutableBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options).copy(Bitmap.Config.RGB_565, true);
Matrix matrix = new Matrix();
int width = mutableBitmap.getWidth();
int height = mutableBitmap.getHeight();
int newWidth = overlayImage.getDrawable().getBounds().width();
int newHeight = overlayImage.getDrawable().getBounds().height();
float scaleWidth = ((float) newWidth)/width;
float scaleHeight = ((float) newHeight)/height;
matrix.postScale(scaleWidth, scaleHeight);
matrix.postRotate(90);
Bitmap resizedBitmap = Bitmap.createBitmap(mutableBitmap, 0, 0, mutableBitmap.getWidth(), mutableBitmap.getHeight(), matrix, true);
finalBitmap = resizedBitmap.copy(Bitmap.Config.RGB_565, true);
Canvas canvas = new Canvas(finalBitmap);
Bitmap overlayBitmap = BitmapFactory.decodeResource(getResources(), overlay);
matrix = new Matrix();
matrix.postRotate(90);
Bitmap resizedOverlay = Bitmap.createBitmap(overlayBitmap, 0, 0, overlayBitmap.getWidth(), overlayBitmap.getHeight(), matrix, true);
canvas.drawBitmap(resizedOverlay, 0, 0, new Paint());
canvas.scale(50, 0);
canvas.save();
//finalBitmap is the image with the overlay on it
}
catch(OutOfMemoryError e) {
//fail
}
}
}
हाय, बिन्नीब! अब इसी तरह की समस्या है। क्या आप मेरी मदद कर सकते हैं? क्या आप अपना कोड दिखा सकते हैं? धन्यवाद! – vsvydenko