2011-11-28 86 views
26

我正在尝试使用来自Android的SHARE INTENT与Facebook,Twitter等分享图像。如何将位图转换为Uri?

我发现代码的图像发送到共享的意图,但是这个代码所需要的位图的URI:fullSizeImageUri

这是全码:

private void startShareMediaActivity(Bitmap image) { 
    boolean isVideo=false; 
    String mimeType="bmp"; 
    Uri fullSizeImageUri=null; 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_SEND); 
    intent.setType(mimeType); 
    intent.putExtra(Intent.EXTRA_STREAM, fullSizeImageUri); 
    try { 
     startActivity(Intent.createChooser(intent, (isVideo ? "video" : "image"))); 
    } catch (android.content.ActivityNotFoundException ex) { } 
} 

请,有人可以帮助我将位图转换为Uri?

谢谢

回答

17
String FILENAME = "image.png"; 
String PATH = "/mnt/sdcard/"+ FILENAME; 
File f = new File(PATH); 
Uri yourUri = Uri.fromFile(f); 
+1

解析总是采取一个字符串不是文件的参数。下次阅读关于功能的细节或者测试它们。 – Arkde

+2

对不起Arkde小混乱任何方式感谢提醒 –

+4

我们不能得到Uri没有保存位图 – Prasad

0

那么你不能将一个位图文件转换成一个uri。阅读关于URI的更多信息here

URI是统一资源标识符。但是,你可以将位图中的绝对或相对URI这样

Absolute: http://android.com/yourImage.bmp 
Relative: yourImage.bmp 
+0

那么如何才能实现我的需要的图像质量?不可能? – NullPointerException

+0

我想你必须重新思考你的方式来看看这个...检查Facebook和Twitter的APIS,看看你如何实现图像共享 – Arkde

50

这里是科林的博客谁建议简单的方法,以位图转换为开放的Click here

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

但如何删除图像插入?它会在文件夹中创建大量图像。 – Noman

+4

不适用于KitKat及更高版本 – DroidLearner

+0

不适用于Android Wear – Lunatikul

0

上述解决方案使用媒体商店并将图像存储在用户主图像文件夹中,通过图库/照片查看器进行查看。该解决方案将其作为临时文件存储在您的应用数据中。在这个例子中,图像是一个位图,标题是图像文件名称的字符串。

File tempDir= Environment.getExternalStorageDirectory(); 
    tempDir=new File(tempDir.getAbsolutePath()+"/.temp/"); 
    tempDir.mkdir(); 
    File tempFile = File.createTempFile(title, ".jpg", tempDir); 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    byte[] bitmapData = bytes.toByteArray(); 

    //write the bytes in file 
    FileOutputStream fos = new FileOutputStream(tempFile); 
    fos.write(bitmapData); 
    fos.flush(); 
    fos.close(); 
    return Uri.fromFile(tempFile); 
0
String picName = "pic.jpg"; 
     String PATH = Environment.getExternalStorageDirectory().getPath()+ picName; 
     File f = new File(PATH); 
     Uri yourUri = Uri.fromFile(f); 
-1

传位图和compressFormat像(PNG,JPG等),并以百分比

public Uri getImageUri(Bitmap src, Bitmap.CompressFormat format, int quality) { 
    ByteArrayOutputStream os = new ByteArrayOutputStream(); 
    src.compress(format, quality, os); 

    String path = MediaStore.Images.Media.insertImage(getContentResolver(), src, "title", null); 
    return Uri.parse(path); 
} 
+0

path可以为null,所以你的代码会在Uri.parse(path) –

+0

上崩溃,你检查路径是否为null。你通过Uri后 –