2010-10-13 14 views
5

Tôi đang sử dụng máy ảnh sẵn có android để chụp ảnh và sau đó đính kèm hình ảnh đó vào email, khi tôi thử nghiệm chức năng này trong thiết bị 1.6, tôi có thể đặt tên cho ảnh được thực hiện bởi camera tích hợp, nhưng trong 2.1, hình ảnh đang có một nghĩa là tên do thiết bị,Lưu bitmap vào thẻ SD bằng cách nén nó vào android

Làm thế nào để cung cấp cho người sử dụng tên quy định tại 2.1 hình ảnh camera inbuilt ..

để tránh rằng vấn đề tôi đang tiết kiệm hình ảnh bằng tay nhưng khi tôi cố gắng để có được hình ảnh trở lại thông qua ý định như bitmap và sau đó lưu nó vào thẻ sd bằng cách sử dụng phương pháp nén

phương pháp này xử lý kết quả từ máy ảnh sẵn có

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    File file = new File(Environment.getExternalStorageDirectory() 
    + "/test.png"); 
    switch (requestCode) 
    { 
    case PHOTO_ACTION: 
    if (resultCode == RESULT_CANCELED) 
    { 
    addPhoto = false; 
    Toast.makeText(this, "Canceled ", Toast.LENGTH_LONG).show(); 
    break; 
    } else if (resultCode == RESULT_OK) 
    { 
    Bundle b = data.getExtras(); 
    Bitmap bm = (Bitmap) b.get("data"); 

    FileOutputStream out; 
    try 
    { 

    out = new FileOutputStream(file); 
    bm.compress(Bitmap.CompressFormat.JPEG, 100, out); 
    out.flush(); 
    out.close(); 
    scanPhoto(file.toString()); 
    out = null; 
    addPhoto = true; 
    } catch (Exception e) 
     { 
     e.printStackTrace(); 
     addPhoto = false; 
     } 

nhưng khi tôi lưu trữ như thế này tôi nhận được hai hình ảnh. một với tên hệ thống và tên khác với tên được đưa ra bởi tôi. nhưng hình ảnh mà người dùng đã xác định có ít độ phân giải hơn, do đó, tôi đặt câu hỏi là cách lưu bitmap với độ phân giải cao hơn khi nén nó .. hãy giúp tôi .... tôi

+0

Tôi đang gặp phải vấn đề tương tự như bạn gặp phải. Bạn đã quản lý để giải quyết nó? Nếu có, bạn có thể vui lòng chia sẻ giải pháp của bạn cho tôi không? Cảm ơn! – Mellon

+0

Tôi đang gặp vấn đề tương tự, không tìm thấy giải pháp nào cho đến bây giờ .. – viv

Trả lời

5

Nếu bạn chỉ muốn lưu bitmap mà không làm mất chất lượng, hãy thử sử dụng CompressFormat.PNG thay vì JPEG, tôi đã thấy những người gặp vấn đề đó trước đây. Hãy thử thay đổi:

bm.compress(Bitmap.CompressFormat.JPEG, 100, out); 

với:

bm.compress(Bitmap.CompressFormat.PNG, 100, out); 

và nhìn thấy nó nó giúp.

+0

Ngay cả sau khi cài đặt 100% ở dạng JPEG, nó vẫn bị mất chất lượng và độ rõ nét. Khi tôi nén bằng cách sử dụng PNG nó giống như rõ ràng. Cảm ơn :-) –

2

Ngoài câu trả lời của Rick ở trên, hãy đảm bảo rằng bạn đang cung cấp URI cho mục đích máy ảnh nơi có thể lưu hình ảnh đầy đủ, nếu không nó sẽ trả về hình ảnh ngón tay cái trong tham số dữ liệu của mục đích. Vì vậy, nó sẽ giống như:

Intent photoPickerIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
imgFile = new File("Cache directory","img.png"); //== where you want full size image 
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(imgFile)); 
startActivityForResult(photoPickerIntent, PickPhoto); 

Đây là lỗi mà tôi đang làm.