2012-06-08 5 views
2

아래 코드를 사용하여 이미지를 회전 시켰습니다. 이미지 회전에는 문제가 없지만 이미지를 회전하면 이미지 픽셀이 줄어 듭니다. 계속 회전하면 이미지가 사라질 것입니다. 어떻게하면이 문제를 해결할 수 있습니다.Android에서는 이미지를 회전시킬 때 천천히 사라집니다.

main.xml에

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:src="@drawable/test" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="66dp" 
     android:text="Click here to Rotate" /> 

</RelativeLayout> 

ImageResizeTestActivity.java

public class ImageResizeTestActivity extends Activity { 
    /** Called when the activity is first created. */ 
    Button click; 
    ImageView img; 
    static File rotated_File; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     click = (Button) findViewById(R.id.button1); 
     img = (ImageView) findViewById(R.id.imageView1); 
     String fname = "Rotated_Image.jpg"; 
     rotated_File = new File("/sdcard/" + fname); 
     click.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if (!(rotated_File.exists())) { 
        Log.v("Inside if", "if"); 
        rotateImage(); 
       } else { 
        Log.v("Inside else", "else"); 
        rotateImage(rotated_File.getAbsolutePath()); 
       } 

      } 
     }); 
    } 

    protected void rotateImage(String absolutePath) { 
     // TODO Auto-generated method stub 
     Bitmap myImg = BitmapFactory.decodeFile(absolutePath); 

     Matrix matrix = new Matrix(); 
     matrix.postRotate(90); 

     Bitmap rotated = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), 
       myImg.getHeight(), matrix, true); 
     saveImage_Rotate(rotated); 
     img.setImageBitmap(rotated); 
    } 

    protected void rotateImage() { 
     // TODO Auto-generated method stub 
     Bitmap myImg = BitmapFactory.decodeResource(getResources(), 
       R.drawable.test); 

     Matrix matrix = new Matrix(); 
     matrix.postRotate(90); 

     Bitmap rotated = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), 
       myImg.getHeight(), matrix, true); 
     saveImage_Rotate(rotated); 
     img.setImageBitmap(rotated); 
    } 

    static void saveImage_Rotate(Bitmap dest2) { 

     if (rotated_File.exists()) 
      rotated_File.delete(); 
     try { 
      FileOutputStream out = new FileOutputStream(rotated_File); 
      dest2.compress(Bitmap.CompressFormat.JPEG, 100, out); 
      out.flush(); 
      out.close(); 

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

    } 
} 

Initially my Image isRotated image

답변

2

문제에 대한 빠른보기를 회전 한 후. jpg를 여러 번 저장하면 손실이 많은 압축 중에 점점 더 품질이 저하됩니다.

대신 PNG를 사용하시는 것이 좋습니다

+0

이 문제를 해결할 생각이 있습니까? – Aerrow

+0

작동하지만 회전하는 데 더 많은 시간이 걸립니다. 20 초 이상 – Aerrow

+0

큰 파일이기 때문에 그럴 것 같습니다. 당신은 웹 - 형식을 시도 할 수 있지만 그것이 파괴적이라고 생각합니다. 여러 번 회전해야합니까? 2 ~ 3 회 90도 회전하려면 180도 또는 270 도의 한 단계로 수행하는 것이 좋습니다. (그 이상의 회전을한다면, 만족할만한 회전을 얻을 때까지 실제 파일을 저장하지 않은 다음 원래 파일에 적용하는 것이 좋습니다) –

관련 문제