Android ImageView到位图后旋转

问题描述:

我想从一个imageView创建一个位图,但我首先需要旋转我的imageView之前转换位图。我使用下面的代码将imageView转换为位图。Android ImageView到位图后旋转

BitmapDrawable drawable = (BitmapDrawable) imgPhoto.getDrawable(); 
Bitmap photo = drawable.getBitmap(); 

imageView实现了旋转手势。我希望能够旋转imageView,然后使用旋转的imageView创建一个位图。但是,似乎我的位图仍然获得原始imageView而不是旋转的位置。以下是完整的代码。谢谢。

public class MainActivity extends AppCompatActivity implements RotationGestureDetector.OnRotationGestureListener{ 

private ImageView imgPhoto, imgBackground, imgCombine; 
private RotationGestureDetector mRotationDetector; 
private Button btnCombine; 
private float angle; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mRotationDetector = new RotationGestureDetector(this); 

    imgPhoto = (ImageView) findViewById(R.id.imgPhoto); 
    imgBackground = (ImageView) findViewById(R.id.imgBackground); 
    collageImage = (ImageView) findViewById(R.id.imgCombine); 

    btnCombine = (Button)findViewById(R.id.btnCombineImage); 
    btnCombine.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      BitmapDrawable drawable = (BitmapDrawable) imgPhoto.getDrawable(); 
      Bitmap photo = drawable.getBitmap(); 

     } 
    }); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event){ 
    mRotationDetector.onTouchEvent(event); 
    return super.onTouchEvent(event); 
} 

@Override 
public void OnRotation(RotationGestureDetector rotationDetector) { 
    angle = rotationDetector.getAngle(); 
    Log.d("RotationGestureDetector", "Rotation: " + Float.toString(angle)); 
    imgPhoto.setRotation(imgPhoto.getRotation() + (-angle)); 
} 

} 

尝试在onClick后使用此代码。它应该提供指定角度的旋转位图。

Matrix matrix = new Matrix(); 
matrix.postRotate(angle); 
Bitmap rotatedPhoto = Bitmap.createBitmap(photo, 0, 0, photo.getWidth(), photo.getHeight(), matrix, true); 
+0

我得到一个方法不能是决心错误。 Bitmap rotatedPhoto = Bitmap.createBitmap(imgPhoto,0,0,imgPhoto.getWidth(),imgPhoto.getHeight(),matrix,true); – Julia

要旋转的ImageView:

Matrix matrix = new Matrix(); 
imageView.setScaleType(ImageView.ScaleType.MATRIX); //required 
matrix.postRotate((float) angle, pivotX, pivotY); 
imageView.setImageMatrix(matrix); 

来源:https://*.com/a/10104318/7639113

然后,你可以通过使用DrawingCache创建位图,

imageView.setDrawingCacheEnabled(true); 
Bitmap bitmap = imageView.getDrawingCache();