我需要将位图转换为 uri 以发送以在 android 的图像裁剪器库中使用它



在这里,我将可绘制视图制作成位图。

     mDrawingPad.setVisibility(View.VISIBLE);
                BitmapDrawable ob = new BitmapDrawable(getResources(), 
              bitmapconv);
                DrawingView mDrawingView=new 
             DrawingView(Previewimage.this);
                mDrawingPad.addView(mDrawingView);
                mDrawingView.setBackground(ob);
                mDrawingView.buildDrawingCache();
                drawbitmap=mDrawingView.getDrawingCache();

我需要将其转换为 URI 以发送到图像裁剪器库

       CropImage.activity(uri).start(Previewimage.this);
   /*This saveImage method will return String path*/
   path = saveImage();
   Uri uri = Uri.parse(path);        
   /****************************************************/
    private String saveImage()
    {
    Bitmap bitmap;
    mDrawingView.setDrawingCacheEnabled(true);
    mDrawingView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    mDrawingView.buildDrawingCache();
    bitmap = Bitmap.createBitmap(mDrawingView.getDrawingCache());
    String state = Environment.getExternalStorageState();
    String root = "";
    String fileName = "/MyImage" + System.currentTimeMillis() + "Image"+ ".jpg";
    String parent = "App_Name";
    File mFile;
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        root = Environment.getExternalStorageDirectory().toString();
        mFile = new File(root, parent);
        if (!mFile.isDirectory())
            mFile.mkdirs();
    } else {
        root = FriendsImageSending.this.getFilesDir().toString();
        mFile = new File(root, parent);
        if (!mFile.isDirectory())
            mFile.mkdirs();
    }
    String strCaptured_FileName = root + "/App_Name" + fileName;
    File f = new File(strCaptured_FileName);
    try {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 95, bytes);
        FileOutputStream fo;
        fo = new FileOutputStream(f);
        fo.write(bytes.toByteArray());
        fo.close();
        bitmap.recycle();
        System.gc();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return strCaptured_FileName;
}

这部分代码工作:

    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    your_bitmap_image.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(your_context.getContentResolver(), your_bitmap_image, "your_title", null);
    Uri uri = Uri.parse(path);

只是尝试替换我在其中提到的区域

代替"your_context",如果您在活动中,请放这个:

MediaStore.Images.Media.insertImage(getContentResolver(), your_bitmap_image, "your_title", null);
        Uri uri = Uri.parse(path);

如果您在片段中:

MediaStore.Images.Media.insertImage(getContext().getContentResolver(), your_bitmap_image, "your_title", null);
        Uri uri = Uri.parse(path);

使用此方法:

public Uri getImageUri(Context ctx, Bitmap bitmap) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = Images.Media.insertImage(ctx.getContentResolver(), 
bitmap, "Temp", null);
return Uri.parse(path);
} 

如果在 Activity 中调用此方法,则按如下所示调用此方法:

 getImageUri(YourClassName.this, yourbitmap);

但是如果你在片段中调用它,那么像这样调用:

 getImageUri(getActivity(), yourbitmap);

最新更新