2

以下のコードを使用して画像を回転させました。画像の回転に問題はありませんが、画像を回転させると画像のピクセルが減少しました。連続して回転させると、画像が消えます。どうすればこの問題を解決できますか。

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();
        }

    }
}

最初は私の画像は 回転後回転画像

4

1 に答える 1

2

問題の概要。jpgを数回保存すると、(不可逆)圧縮中にますます劣化します。

代わりにpngを使用することをお勧めします

于 2012-06-08T13:55:39.427 に答える