2011-12-11 9 views
0

を保存するので、fileOutputStreamを使用して画像をSDカードに保存します。画像はjpeg-のフォーマットになっていますが、画像が歪んで保存されます。これはサムネイル画像が画像の正しい表現であるために奇妙ですが、開いたときには一連の水平線です。 (水平に歪んだJPEGとプット一緒にサムネイルの)イメージがでサーバーにアップロードされていないsd_cardを保存した後、jpegが歪んで

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { 
    if(previewing){ 
     camera.stopPreview(); 
     previewing=false; 
    } 
    if(camera!=null){ 
     try{ 
      camera.setPreviewDisplay(surfaceHolder); 
      Camera.Parameters parameters = camera.getParameters(); 
      parameters.setPictureFormat(PixelFormat.JPEG); 
      parameters.setPreviewSize(width, height); 
      camera.setParameters(parameters); 
      camera.startPreview();    
      previewing=true; 
     } catch(IOException e){} 
    } 

} 

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

     OutputStream outputStream; 


     try{ 
      outputStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis())); //to sd card 
      imageFileOS.write(data); 
      imageFileOS.flush(); 
      imageFileOS.close(); 


     }catch(FileNotFoundException e){ 
      e.printStackTrace(); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 

    } 
}; 

:ここ

は私のコードからいくつか抜粋していますその時、誰かが何が起こっているのか考えていることを願っています。そうでなければ、後で写真をアップロードしようとすることができます。

+0

私はこれを私のOG droid- 2.2.3で試してみると、画像は完全に保存されます。私は私のドロイドを信じられないほど使っています2 - 2.3.4画像は歪んで保存されます – kleaver

答えて

0

問題が解決:2.2で

iは問題2.3で

を有していなかった、画像は、これは私は基本的に同一である「getBestPictureSize」と呼ばれる方法を用いて固定しdistorted-保存しました方法私は、画面のアスペクト比のための最高のプレビューサイズを取得するために使用

これはアプリが実行されているデバイスに最適な画像サイズを取得するためのメソッドです...

private Camera.Size getBestPicturSize(int width, int height) 
{ 
     Camera.Size result=null;  
     Camera.Parameters p = camera.getParameters(); 
     for (Camera.Size size : p.getSupportedPictureSizes()) { 
      if (size.width<=width && size.height<=height) { 
       if (result==null) { 
        result=size; 
       } else { 
        int resultArea=result.width*result.height; 
        int newArea=size.width*size.height; 

        if (newArea>resultArea) { 
         result=size; 
        } 
       } 
      } 
     } 
    return result; 

} 

これはsurfaceChangedコールバックです。上記のメソッドを使用して、camera.takePicture(...)の結果の画像を適切にサイズ調整します。私が過ごしたよう

for (Camera.Size size : p.getSupportedPreviewSizes()) { 

ため

for (Camera.Size size : p.getSupportedPictureSizes()) { 

が、これは誰かに役立ちます願っています:あなたは、ラインを切り替えることで、プレビューサイズを取得する方法サイジングこの画像を使用することができます

private Camera.Size getBestPicturSize(int width, int height) 
{ 
     Camera.Size result=null;  
     Camera.Parameters p = camera.getParameters(); 
     for (Camera.Size size : p.getSupportedPictureSizes()) { 
      if (size.width<=width && size.height<=height) { 
       if (result==null) { 
        result=size; 
       } else { 
        int resultArea=result.width*result.height; 
        int newArea=size.width*size.height; 

        if (newArea>resultArea) { 
         result=size; 
        } 
       } 
      } 
     } 
    return result; 

} 

10時間のように、この機能を強調することは私の2.3.4ではうまくいかないだろうが、私の2.2ではそうなるだろう。

getBestPictureSizeを2.2に設定すると、強制終了されます。どのように私はまだそれを処理するつもりを把握していない

+0

私はどんなAPI環境でも処理するメソッドを操作したいと思いますが、 "android.os.Build.VERSION.SDK_INT" 2.3+の画像サイズを設定し、2.2の画像サイズを設定する - – kleaver

関連する問題