2 Stimmen

Im Android verschwindet das Bild langsam, wenn es gedreht wird.

Ich habe den folgenden Code verwendet, um das Bild zu drehen. Es gibt kein Problem bei der Bildrotation, aber wenn ich das Bild drehe, werden die Bildpixel reduziert. Wenn ich kontinuierlich drehe, verschwindet das Bild. Wie kann ich dieses Problem lösen.

main.xml

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

    }
}

Ursprünglich ist mein Bild nach der Drehung Gedrehtes Bild

2voto

Viktor Mellgren Punkte 4122

Ein kurzer Blick auf das Problem. Du speicherst das jpg mehrmals ab, und während der (verlustbehafteten) Komprimierung wird es immer mehr degradieren.

Ich würde vorschlagen, stattdessen png zu verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X