Android实现图片旋转的步骤
流程图
flowchart TD
A[开始] --> B{导入图片}
B --> C{选择旋转角度}
C --> D[旋转图片]
D --> E[保存旋转后的图片]
E --> F[结束]
代码实现
导入图片
首先,我们需要导入一张图片作为旋转的对象。可以通过从相册选择图片或者拍摄照片获取图片的路径。
private String imagePath;
private void importImage() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, SELECT_IMAGE_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_IMAGE_REQUEST_CODE && resultCode == RESULT_OK) {
if (data != null && data.getData() != null) {
Uri imageUri = data.getData();
imagePath = getImagePathFromUri(imageUri);
}
}
}
private String getImagePathFromUri(Uri imageUri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(imageUri, projection, null, null, null);
if (cursor != null) {
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(columnIndex);
cursor.close();
return path;
}
return null;
}
选择旋转角度
接下来,我们需要让用户选择旋转的角度。可以通过一个对话框来展示可选的角度,并提供一个滑动条供用户选择。
private int rotationAngle;
private void selectRotationAngle() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("选择旋转角度");
final SeekBar seekBar = new SeekBar(this);
seekBar.setMax(360);
builder.setView(seekBar);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
rotationAngle = seekBar.getProgress();
rotateImage();
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
旋转图片
在确定了旋转角度后,我们可以使用Matrix类来进行图片的旋转操作。
private void rotateImage() {
Bitmap originalBitmap = BitmapFactory.decodeFile(imagePath);
Matrix matrix = new Matrix();
matrix.postRotate(rotationAngle);
Bitmap rotatedBitmap = Bitmap.createBitmap(originalBitmap, 0, 0, originalBitmap.getWidth(), originalBitmap.getHeight(), matrix, true);
imageView.setImageBitmap(rotatedBitmap);
}
保存旋转后的图片
最后,我们需要将旋转后的图片保存到手机相册中。
private void saveRotatedImage() {
Bitmap rotatedBitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
String rotatedImagePath = getExternalFilesDir(Environment.DIRECTORY_PICTURES) + File.separator + "rotated_image.jpg";
try {
FileOutputStream outputStream = new FileOutputStream(rotatedImagePath);
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();
Toast.makeText(this, "图片已保存至:" + rotatedImagePath, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "保存图片失败", Toast.LENGTH_SHORT).show();
}
}
状态图
stateDiagram
[*] --> 导入图片
导入图片 --> 选择旋转角度
选择旋转角度 --> 旋转图片
旋转图片 --> 保存旋转后的图片
保存旋转后的图片 --> [*]