0

私はこの単純な機能を持っています:

  private Bitmap rotateImg(Bitmap b){       
    Matrix bMat = new Matrix();
    bMat.preRotate(30, b.getWidth()/2, b.getHeight()/2);
    return Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), bMat,false);
}

次のように実行されます。

    currentStateImg = rotateImg(currentStateImg);

なんらかの理由で、初めて実行するときは完全に機能しますが、実行するたびにビットマップを回転させますが、VM がメモリ不足になるまでイメージを大きくします (周囲に空白を残します)。

私はすでに試しました:

  postRotate
  preRotate
  setRotate
  setting the last element of createBitmap (filter) to true/false
  returning a copy of the resulted bitmap from createBitmap so i could apply the config Config.ARGB_8888

奇妙なことは、私もこのコードを試したことです:

 RectF r = new RectF(0,0,b.getWidth(),b.getHeight());
 bMat.mapRect(r);

2回目の実行では、行列計算(r.width()とr.height()の値)が実行されるたびにすでに大きな画像サイズを返しているため、行列値の問題であり、関連していないようですcreateBitmap() 関数に

誰が問題になる可能性があるかについて何らかの考えを持っていますか? 必要な回数だけビットマップを回転できるようにするには、どの値を変更する必要がありますか?

よろしく。

4

1 に答える 1

0

紙を用意し、その上に携帯電話を置き (長方形だと思います)、携帯電話が完全に収まる長方形を描きます。次に、それを回転させて、再び長方形を描きます。電話の対角線が高さまたは幅よりも長いため、長方形が大きくなります。したがって、画像は同じままですが、境界の四角形が大きくなり、ビットマップも大きくなる必要があります。

于 2013-06-01T02:20:14.743 に答える