7

横向きモードのカメラからの画像を保存しています。そのため、横向きモードで保存され、横向きモードのオーバーレイを適用します。その画像を回転させて保存したい。たとえば、私がこれを持っている場合

ここに画像の説明を入力

時計回りに1回90度回転させてこれにしてsdcardに保存したい:

ここに画像の説明を入力

これはどのように達成されますか?

4

5 に答える 5

14
void rotate(float x)
    {
        Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.tedd);

        int width = bitmapOrg.getWidth();

        int height = bitmapOrg.getHeight();


        int newWidth = 200;

        int newHeight  = 200;

        // calculate the scale - in this case = 0.4f

         float scaleWidth = ((float) newWidth) / width;

         float scaleHeight = ((float) newHeight) / height;

         Matrix matrix = new Matrix();

         matrix.postScale(scaleWidth, scaleHeight);
         matrix.postRotate(x);

         Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,width, height, matrix, true);

         iv.setScaleType(ScaleType.CENTER);
         iv.setImageBitmap(resizedBitmap);
    }
于 2012-04-26T11:57:02.717 に答える
6

これをチェックして

public static Bitmap rotateImage(Bitmap src, float degree) 
{
        // create new matrix
        Matrix matrix = new Matrix();
        // setup rotation degree
        matrix.postRotate(degree);
        Bitmap bmp = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
        return bmp;
}
于 2014-01-05T18:46:17.500 に答える
1

Canvas API を使用してそれを行うことができます。幅と高さを切り替える必要があることに注意してください。

    final int width = landscapeBitmap.getWidth();
    final int height = landscapeBitmap.getHeight();
    Bitmap portraitBitmap = Bitmap.createBitmap(height, width, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(portraitBitmap);
    c.rotate(90, height/2, width/2);
    c.drawBitmap(landscapeBitmap, 0,0,null);
    portraitBitmap.compress(CompressFormat.JPEG, 100, stream);
于 2012-04-26T11:58:24.057 に答える
0

Singhak のソリューションは正常に機能します。結果のビットマップのサイズに合わせる必要がある場合 (おそらく ImageView の場合)、次のようにメソッドを拡張できます。

public static Bitmap rotateBitmapZoom(Bitmap bmOrg, float degree, float zoom){
    Matrix matrix = new Matrix();
    matrix.postRotate(degree);

    float newHeight = bmOrg.getHeight() * zoom;
    float newWidth  = bmOrg.getWidth() / 100 * (100.0f / bmOrg.getHeight() * newHeight);

    return Bitmap.createBitmap(bmOrg, 0, 0, (int)newWidth, (int)newHeight, matrix, true);
}
于 2014-11-30T12:37:59.140 に答える
0

Matrix.rotate(degrees) を使用し、その回転マトリックスを使用して Bitmap を独自の Canvas に描画します。描画する前にビットマップのコピーを作成する必要があるかどうかはわかりません。

Bitmap.compress(...) を使用して、ビットマップを出力ストリームに圧縮します。

于 2012-04-26T11:51:43.510 に答える