2011-09-10 21 views
0

私はカムで画像を保存し、画像を保存するためのデモを行い、その後、最後の画像で最後の画像を表示しています。これはエミュレータでは問題ありませんが、デモを実際の電話機にインストールすると写真を作成できますが、ファイルサイズはO KBです。そのカメラで画像を撮るが、画像サイズは0 KB

//This is the method where I make the photo 
    private boolean makePhoto(){ 
     try{ 
      ImageCaptureCallback camDemo = null; 
      SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS"); 
      String filenameTimeStamp = timeStampFormat.format(new Date()); 
      ContentValues values = new ContentValues(); 
      values.put(MediaColumns.TITLE, String.format("%s.jpg", filenameTimeStamp)); 
      values.put(ImageColumns.DESCRIPTION, "Imagen desde Android Emulator"); 
      Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values); 

      Log.d("titulo: ", values.get(MediaColumns.TITLE).toString()); 
      camDemo = new ImageCaptureCallback(getContentResolver().openOutputStream(uri)); 
      this.camera.takePicture(this.mShutterCallback, this.mPictureCallback, camDemo); 
      Log.d("makePhoto", "Foto hecha"); 
      return true; 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
      Context context = getApplicationContext();   
      int duration = Toast.LENGTH_SHORT; 
      Toast toast = Toast.makeText(context, ex.toString(), duration); 
      toast.show(); 
     }  
     return false; 
    } 

    //This is the object where the pic taken is saved 
public class ImageCaptureCallback implements PictureCallback { 
    private OutputStream fileoutputStream; 

    public ImageCaptureCallback(OutputStream fileoutputStream){ 
     this.fileoutputStream = fileoutputStream; 
    } 

    public void onPictureTaken(byte[] data, Camera camera){ 
     try{ 
      BitmapFactory.Options options=new BitmapFactory.Options(); 
      options.inSampleSize = 1; 

      Bitmap myImage = BitmapFactory.decodeByteArray(data, 0, data.length,options); 


      BufferedOutputStream bos = new BufferedOutputStream(this.fileoutputStream); 

      myImage.compress(CompressFormat.JPEG, 75, bos); 

      bos.flush(); 
      bos.close(); 

     }catch (Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 

} 

どうしましたか?

+0

にstartActivityForResuleの下に任意のエラーログを追加しますか? –

+0

表示するコードはありますか? – EboMike

+0

コードを教えてください。 PictureCallbackを使用していますか? –

答えて

0

私は写真を撮ってあなたのアプリケーションに写真を撮るためのコードを送っています。

まず以下を追加しますがつもり:その後、

File imageFile = new File(imageFilePath); 
Uri imageFileUri = Uri.fromFile(imageFile); 
Intent i = new Intent(
    android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri); 
startActivityForResult(i, CAMERA_PIC_REQUEST); 

そして、あなたのコード

protected void onActivityResult(int requestCode, int resultCode, 
      Intent imageReturnedIntent) { 
     super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
     switch (requestCode) 
{ 
case SELECT_PICTURE: 

Uri selectedImage = imageReturnedIntent.getData(); 
String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
Cursor cursor = getContentResolver().query(selectedImage, 
filePathColumn, null, null, null); 
cursor.moveToFirst(); 
int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
// file path of selected image 
String filePath = cursor.getString(columnIndex); 
cursor.close(); 
Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
yourSelectedImage.compress(Bitmap.CompressFormat.PNG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 
encode = Base64.encodeBytes(byteArray); 
try { 
    byte[] decode = Base64.decode(encode); 
    Bitmap bmp = BitmapFactory.decodeByteArray(decode, 0, 
      decode.length); 
    imgview_photo.setImageBitmap(bmp); 
    btn_getphoto.setVisibility(View.INVISIBLE); 
    btn_cancel.setVisibility(View.VISIBLE); 
    btn_upload.setVisibility(View.VISIBLE); 
    } 
catch (IOException e) { 
    e.printStackTrace(); 
} 
break; 
case CAMERA_PIC_REQUEST: 
    Bitmap bmp = BitmapFactory.decodeFile(imageFilePath); 
    int width = bmp.getWidth(); 
    int height = bmp.getHeight(); 
    float scaleWidth = ((float) 300)/width; 
    float scaleHeight = ((float) 300)/height; 
    Matrix matrix = new Matrix(); 
    matrix.postScale(scaleWidth, scaleHeight); 
    Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 0, 0, width, 
     height, matrix, true); 
    ByteArrayOutputStream baostream = new ByteArrayOutputStream(); 
    resizedBitmap.compress(Bitmap.CompressFormat.PNG, 100, baostream); 
    byte[] byteArrays = baostream.toByteArray(); 
    encode = Base64.encodeBytes(byteArrays); 
    try { 
     byte[] decode = Base64.decode(encode); 
     Bitmap bitmp = BitmapFactory.decodeByteArray(decode, 0, 
       decode.length); 
     imgview_photo.setImageBitmap(bitmp); 
     btn_getphoto.setVisibility(View.INVISIBLE); 
     btn_cancel.setVisibility(View.VISIBLE); 
     btn_upload.setVisibility(View.VISIBLE); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
} 
+0

コードをありがとう、私は写真を作ることができます、私はエミュレータで写真を表示することができますが、私は電話で写真を作るときに私はサイズがOのKBですファイルを保存します。私のコードで何が間違っていますか?事前に感謝、ホセカルロス –