2009-01-18 36 views
5

Tôi đã gặp phải một vấn đề nhỏ với một cái gì đó mà tôi có thể chỉ nhìn ra.Android: Nhận tên tệp từ máy ảnh?

Tôi muốn chụp ảnh từ bản xem trước bề mặt của máy ảnh và lưu ảnh vào sd_card. Điều này làm việc ALMOST hoàn hảo. Tôi gán cho nó một tên tệp và vì một lý do nào đó, nó không sử dụng tên tệp.

Đây là những gì tôi đã cố gắng để làm:

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; 


     } 
    }); 

Nó sẽ không sử dụng tên tập tin (. Tức là tem thời gian/ngày Tôi hỏi nó)

Trả lời

5

này đã được giải quyết bằng cách thực hiện PictureCallback thông qua lớp ImageCaptureCallback và ghi đè tệp onPictureTaken nơi tệp được ghi qua luồng đầu ra tệp. Tất cả những gì bạn phải làm là thay đổi luồng fileoutput thành tên tập tin bạn muốn.

0

nó không lưu hình ảnh? trong ứng dụng của tôi, mã này lưu hình ảnh, có thể bạn sử dụng biến "filaname" để lấy hình ảnh từ sdcard? để sử dụng hình ảnh từ sdcard là tốt hơn để tiết kiệm trong biến, cho examople, "fileUri" giá trị của uri.toString, kết thúc nhận được từ tập tin sdcard với uri Uri.parse (fileUri) ..

+0

Nó đã lưu hình ảnh tốt, tôi đã cố gắng này: ContentValues ​​values ​​= new ContentValues ​​(); values.put (Media.TITLE, filename); Uri uri = getContentResolver() chèn (Media.EXTERNAL_CONTENT_URI, giá trị); Điều đó không hiệu quả đối với tôi. Tôi đã đi về nó theo cách tốt nhất tôi có thể – Chrispix

0

Ở đây bạn đi: Hy vọng điều này sẽ giúp/Có lẽ không phải là cách tốt nhất để đi về nó, nhưng nó đã làm việc.

////////////////////////////////////////////// ///////////////////////////////// // // Đây là cuộc gọi lại hình ảnh chụp bằng camera. //
// // ///////////////////////////////////// ///////////////////////////////////////

import java.io.FileOutputStream; 
import java.io.OutputStream; 
import android.hardware.Camera; 
import android.hardware.Camera.PictureCallback; 
import android.util.Log; 
import android.widget.Toast; 

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(); 
     } 
     } 

} 


enter code here 
Các vấn đề liên quan