Xamarin.android 裁剪并保存图像

Xamarin.android 裁剪并保存图像,xamarin.android,Xamarin.android,我想用的方法如下: 1-我想打开相机,选择图像,裁剪图像并将其保存在imageview中 2-在imageview中裁剪并保存设备内部保存的图像 埃罗 开放式摄像机 开放式画廊 完整项目 public类main活动:AppCompatActivity { 图像视图图像视图; Android.Support.V7.Widget.Toolbar工具栏; 文件; Android.Net.Uri; 意图CamIntent、GalIntent、CropIntent; const int Reques

我想用的方法如下: 1-我想打开相机,选择图像,裁剪图像并将其保存在imageview中 2-在imageview中裁剪并保存设备内部保存的图像

埃罗

开放式摄像机

开放式画廊

完整项目

public类main活动:AppCompatActivity
{
图像视图图像视图;
Android.Support.V7.Widget.Toolbar工具栏;
文件;
Android.Net.Uri;
意图CamIntent、GalIntent、CropIntent;
const int RequestPermissionCode=1;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
toolbar=findviewbyd(Resource.Id.toolbar);
toolbar.Title=“裁剪图像”;
SetTitleTextColor(Android.Graphics.Color.White);
设置支持操作栏(工具栏);
imageView=findviewbyd(Resource.Id.imageView);
int permissionCheck=(int)ContextCompat.CheckSelfPermission(这是Manifest.Permission.Camera);
if(permissionCheck==(int)Permission.Denied)
RequestRuntimePermission();
}
私有void RequestRuntimePermission()
{
if(ActivityCompat.shouldshowRequestPermissionRegulation(这是Manifest.Permission.Camera))
Toast.MakeText(此“摄像头权限将允许我们访问摄像头应用程序”,ToastLength.Short).Show();
其他的
ActivityCompat.RequestPermissions(这是新字符串[]{Manifest.Permission.Camera},RequestPermissionCode);
}
公共覆盖布尔onCreateOptions菜单(IMenu菜单)
{
菜单充气器。充气(Resource.Menu.Menu_main,Menu);
返回true;
}
公共覆盖bool OnOptionsItemSelected(IMenuItem)
{
if(item.ItemId==Resource.Id.btn\u摄像机)
CameraOpen();
else if(item.ItemId==Resource.Id.btn\u gallery)
GalleryOpen();
返回true;
}
私人图书馆
{
galitent=newintent(Intent.ActionPick,MediaStore.Images.Media.ExternalContentUri);
StartActivityForResult(Intent.CreateChooser(GalIntent,“从图库中选择图像”),2);
}
私有无效CameraOpen()
{
CamIntent=新意图(MediaStore.ActionImageCapture);
file=新文件(Android.OS.Environment.ExternalStorageDirectory,“file_image”+DateTime.Now+“.jpg”);
uri=Android.Net.uri.FromFile(文件);
camentent.PutExtra(MediaStore.ExtraOutput,uri);
CamIntent.PutExtra(“返回数据”,真);
StartActivityForResult(CamIntent,0);
}
受保护的覆盖void OnActivityResult(int请求代码、[GeneratedEnum]结果代码、意图数据)
{
if(requestCode==0&&resultCode==Result.Ok)
CropImage();
else if(requestCode==2)
{
如果(数据!=null)
{
uri=data.data;
CropImage();
}
}
else if(requestCode==1)
{
如果(数据!=null)
{
Bundle=data.Extras;
位图位图=(位图)bundle.GetParcelable(“数据”);
设置图像位图(位图);
}
}
}
私有无效CropImage()
{
尝试
{
CropIntent=newintent(“com.android.camera.action.CROP”);
SetDataAndType(uri,“image/*”);
CropIntent.PutExtra(“作物”、“真实”);
CropIntent.PutExtra(“输出”,180);
CropIntent.PutExtra(“outputY”,180);
CropIntent.PutExtra(“aspectX”,3);
CropIntent.PutExtra(“aspectY”,4);
CropIntent.PutExtra(“scaleupipfneed”,真);
CropIntent.PutExtra(“返回数据”,真);
StartActivityForResult(CropIntent,1);
}
抓住
{
}
}
public override void OnRequestPermissionsResult(int-requestCode,字符串[]权限,[GeneratedEnum]权限[]grantResults)
{
开关(请求代码)
{
案例请求许可代码:
{
if(grantResults.Length>0&&grantResults[0]==权限.已授予)
Toast.MakeText(这是“授予的权限”,ToastLength.Short).Show();
其他的
Toast.MakeText(这是“权限取消”,ToastLength.Short).Show();
}
打破
}
}
}
1-我想打开相机,选择图像,裁剪图像并将其保存在imageview中

2-在imageview中裁剪并保存设备内部保存的图像

如果您想这样做,我建议您可以使用XamarinAndroidImageCropper来完成

首先,通过Manage Nuget package安装XamarinAndroidImageCropper,然后向清单添加权限

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

像这样使用CropImageView:

<com.theartofdev.edmodo.cropper.CropImageView
android:id="@+id/cropImageView"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cropAspectRatioX="16"
app:cropAspectRatioY="9"
app:cropBackgroundColor="#88AA66CC"
app:cropBorderCornerColor="@android:color/holo_blue_bright"
app:cropBorderCornerOffset="0dp"
app:cropBorderCornerThickness="5dp"
app:cropBorderLineColor="@android:color/holo_green_light"
app:cropBorderLineThickness="1dp"
app:cropGuidelines="on"
app:cropGuidelinesColor="@android:color/holo_red_dark"
app:cropInitialCropWindowPaddingRatio="0"
app:cropSnapRadius="0dp"/>

更多详细信息,请查看:


Cherry Bu。谢谢大家的回复和跟进。但是,当我修改整个项目时,是否可以只修改项目的一小部分?从设备中选择图像并在中显示后,裁剪图像imageview@monemahmed当然,您可以通过修改此项目来完成。嗨,Cherry Bu。是的,您添加的示例已完成,但裁剪过程后如何保存图像?另一个问题是,如何删除已被剪切的部分的空白背景?
<com.theartofdev.edmodo.cropper.CropImageView
android:id="@+id/cropImageView"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cropAspectRatioX="16"
app:cropAspectRatioY="9"
app:cropBackgroundColor="#88AA66CC"
app:cropBorderCornerColor="@android:color/holo_blue_bright"
app:cropBorderCornerOffset="0dp"
app:cropBorderCornerThickness="5dp"
app:cropBorderLineColor="@android:color/holo_green_light"
app:cropBorderLineThickness="1dp"
app:cropGuidelines="on"
app:cropGuidelinesColor="@android:color/holo_red_dark"
app:cropInitialCropWindowPaddingRatio="0"
app:cropSnapRadius="0dp"/>