1

我想從一個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)); 
} 

} 

回答

0

嘗試在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

0

要旋轉的ImageView:

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

來源:https://stackoverflow.com/a/10104318/7639113

然後,你可以通過使用DrawingCache創建位圖,

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