ذكري المظهر:الحصول على اسم الملف من الكاميرا؟

StackOverflow https://stackoverflow.com/questions/455830

  •  19-08-2019
  •  | 
  •  

سؤال

لقد واجهت مشكلة مع شيء ربما أتجاهله للتو.

أريد التقاط صورة من معاينة سطح الكاميرا وحفظها في ملف sd_card.هذا يعمل بشكل مثالي تقريبًا.لقد قمت بتعيين اسم ملف له، لكنه لا يستخدم ملحق filename.

هذا ما كنت أحاول القيام به:

Button imagecapture = (Button) findViewById(R.id.imagecapture);
imagecapture.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        String filename = null;
        ImageCaptureCallback iccb = null;

        try {
            filename = timeStampFormat.format(new Date());
            ContentValues values = new ContentValues();
            values.put(Media.TITLE, filename);
            values.put(Media.DESCRIPTION, "Image capture by camera");

            Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
            iccb = new ImageCaptureCallback(getContentResolver().openOutputStream(uri));
        } catch (Exception ex) {
            ex.printStackTrace();
            Log.e(getClass().getSimpleName(), ex.getMessage(), ex);
        }
        camera.takePicture(mShutterCallback, mPictureCallbackRaw, iccb);
        com.froogloid.android.gspot.Park.imageFileName = filename;
    }
});

لن يستخدم اسم الملف (أي.ختم الوقت/التاريخ الذي أطلبه منه.)

هل كانت مفيدة؟

المحلول

تم حل هذه المشكلة من خلال تطبيق PictureCallback عبر فئة ImageCaptureCallback، وتجاوز onPictureTaken حيث تتم كتابة الملف عبر دفق إخراج الملف.كل ما عليك فعله هو تغيير دفق إخراج الملف إلى اسم الملف الذي تريده.

نصائح أخرى

لا يحفظ الصورة؟في تطبيقي، يحفظ هذا الرمز الصورة، ربما تستخدم "filaname" المتغير للحصول على صورة من sdcard؟لاستخدام صورة من sdcard، من الأفضل حفظها في متغير، على سبيل المثال، قيمة "fileUri" لـ uri.toString، وإنهاء الحصول على ملف sdcard باستخدام uri Uri.parse(fileUri)..

آمل أن يكون هذا مفيدًا / ربما لا تكون هذه هي أفضل طريقة للقيام بذلك، لكنها نجحت.ها أنت ذا:
هذا ال رد الاتصال صورة التقاط الكاميرا.

public class ImageCaptureCallback implements PictureCallback {

    private OutputStream filoutputStream;
    public ImageCaptureCallback(OutputStream filoutputStream) {
        this.filoutputStream = filoutputStream;
    }

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        try {
            Log.v(getClass().getSimpleName(), "onPictureTaken=" + data + " length = " + data.length);
            FileOutputStream buf = new FileOutputStream("/sdcard/dcim/Camera/" + CameraActivity.filename + ".jpg");
            buf.write(data);
            buf.flush();
            buf.close();
            // filoutputStream.write(data);
            filoutputStream.flush();
            filoutputStream.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top