2012-06-08 37 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 is旋轉Rotated image

回答

2

就讓我們來看看在這個問題之後。您多次保存jpg,在(有損)壓縮過程中,它會越來越多地降級。

我建議你用png代替

+0

有什麼想法解決這個問題? – Aerrow

+0

它的工作原理,但它需要更多的時間來旋轉。超過20秒 – Aerrow

+0

我想這是因爲它是一個更大的文件。你可以嘗試webp格式,但也認爲它是破壞性的。 是否需要旋轉幾次?如果你想旋轉90度2-3次,最好是180度或270度的一步。 (如果你旋轉得比這更多,那麼你可能會考慮不保存實際的文件,直到你有一個滿意的旋轉,然後將它應用到原始文件) –