Java 位图到uri的转换

Java 位图到uri的转换,java,android,bitmap,uri,Java,Android,Bitmap,Uri,如何在从库中选择裁剪图像后从位图中获取uri 我试过这个 public Uri getImageUri(Context inContext, Bitmap inImage) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); inImage.compress(Bitmap.CompressFormat.PNG, 100, bytes); String path = MediaStore.Images.M

如何在从库中选择裁剪图像后从位图中获取uri

我试过这个

public Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.PNG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    return Uri.parse(path);
}
但是uri=null

我想从中获取uri

if (resultCode == Activity.RESULT_OK && requestCode == PICK_IMAGE_REQUEST) {
            Uri imageUri = data.getData();
            performCrop(imageUri);
            Log.e(TAG, "image before crop:" + imageUri);

        }else if(resultCode == Activity.RESULT_OK && requestCode == PIC_CROP ){
            // get the returned data
            Bundle extras = data.getExtras();
            // get the cropped bitmap
            Bitmap selectedBitmap = extras.getParcelable("data");
            getImageUri(this,selectedBitmap);
            Uri ImageUri = data.getData();
            Log.e(TAG, "image before crop:" + ImageUri);
裁剪前的日志图像=null

--更新裁剪--

   private void performCrop(Uri picUri) {
try {
    Intent cropIntent = new Intent("com.android.camera.action.CROP");
    // indicate image type and Uri
    cropIntent.setDataAndType(picUri, "image/*");
    // set crop properties here
    cropIntent.putExtra("crop", true);
    // indicate aspect of desired crop
    cropIntent.putExtra("aspectX", 1);
    cropIntent.putExtra("aspectY", 1);
    // indicate output X and Y
    cropIntent.putExtra("outputX", 128);
    cropIntent.putExtra("outputY", 128);
    // retrieve data on return
    cropIntent.putExtra("return-data", true);
    // start the activity - we handle returning in onActivityResult
    startActivityForResult(cropIntent, PIC_CROP);
}
// respond to users whose devices do not support the crop action
catch (ActivityNotFoundException anfe) {
    // display an error message
    String errorMessage = "Whoops - your device doesn't support the crop action!";
    Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
    toast.show();
}

我猜你正在从你的图库中选择图像

额外津贴:

清单中读取/写入数据的权限 验证权限并处理未授予权限的情况 声明的请求代码:

public static final int PICK_IMAGE = 1050;
一, 打开图像选择器活动

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
在活动中:

startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);
片段:

fragment.startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);
2从所选内容检索图像:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){

    if(resultCode == RESULT_OK && data != null && data.getData() != null ){

    switch(requestCode){

        case PICK_IMAGE_REQUEST:
            //get filepath from the result of image selection
            Uri filePath = data.getData();
            //Start activity for result for crop for selected image
            startCropActivity(filePath);
            break;

        case PIC_CROP:
            // get the returned data
            Bundle extras = data.getExtras();
            // get the cropped bitmap
            Bitmap selectedBitmap = extras.getParcelable("data");
            //do whatever with the bitmap of the image
            break;

            }
        }
}
按如下方式开始作物活动:

private void startCropActivity(Uri filePath){
    try {
        Intent cropIntent = new Intent("com.android.camera.action.CROP");
        cropIntent.setDataAndType(filePath, "image/*");
        cropIntent.putExtra("crop", true);
        cropIntent.putExtra("aspectX", 1);
        cropIntent.putExtra("aspectY", 1);
        cropIntent.putExtra("outputX", 128);
        cropIntent.putExtra("outputY", 128);
        cropIntent.putExtra("return-data", true);

        startActivityForResult(cropIntent, PIC_CROP);

    }catch (ActivityNotFoundException anfe) {
        // display an error message
        Toast.makeText(this, "Could not crop", Toast.LENGTH_SHORT).show();

    }
}

@OsamahM我已经更新了我的答案…裁剪的结果生成了裁剪图像的位图..取决于你想做什么。。是否要保存图像?或者将其设置为图像视图ect。@OsamahM日志是否说明了严格模式?我需要将图像另存为temp并获取uri,裁剪后需要将图像添加到应用程序中,请参见此处我如何将图像添加到应用程序中,而不只是从galleryUri ImageUri=data.getData中进行裁剪;getContentResolver.takePersistableUriPermissionObjects.requireNonNullImageUri,Intent.FLAG\u GRANT\u READ\u URI\u PERMISSION;stickers.addStickerImageUri,这个;完成星状视神经;我需要这个工作后也裁剪,所以可能需要保存图像首先获得uri@haider malik你能帮我解决这个问题吗@haider malik