相关疑难解决方法(0)

Android 4.4(KitKat)上的Android Gallery为Intent.ACTION_GET_CONTENT返回不同的URI

在KitKat之前(或在新Gallery之前)Intent.ACTION_GET_CONTENT返回这样的URI

内容://媒体/外部/图像/媒体/ 3951.

使用ContentResolver和quering MediaStore.Images.Media.DATA返回文件URL.

但是在KitKat中,Gallery会返回一个URI(通过"Last"),如下所示:

内容://com.android.providers.media.documents/document/image:3951

我该如何处理?

android android-intent android-contentresolver android-gallery

212
推荐指数
9
解决办法
18万
查看次数

"位图太大而无法上传到纹理中"

我正在将一个位图加载到ImageView中,并看到此错误.我收集此限制与OpenGL硬件纹理(2048x2048)的大小限制有关.我需要加载的图像是大约4,000像素高的捏缩图像.

我试过关闭清单中的硬件加速,但没有快乐.

    <application
        android:hardwareAccelerated="false"
        ....
        >
Run Code Online (Sandbox Code Playgroud)

是否可以将大于2048像素的图像加载到ImageView中?

android android-image android-imageview android-bitmap

149
推荐指数
9
解决办法
11万
查看次数

如何在上传到服务器之前减小图像文件大小

许多应用程序允许共享从图库中挑选的图像.

他们上传原始图片文件吗?这是1-3 MB?或者他们处理?

在任何情况下,我如何从文件路径中获取图像,通过降低分辨率来减小其大小,并将其保存在其他地方并尝试上传?

我试过了:

Bitmap photo = decodeSampledBitmapFromFile(filePath, DESIRED_WIDTH,
                    DESIRED_HEIGHT);

FileOutputStream out = new FileOutputStream(filePath);
photo.compress(Bitmap.CompressFormat.JPEG, 100, out);

public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth,
        int reqHeight) {

    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    final int height = options.outHeight;
    final int width = options.outWidth;
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    int inSampleSize = 1;

    if (height > reqHeight) {
        inSampleSize = Math.round((float) height / (float) reqHeight);
    }
    int expectedWidth = width / inSampleSize;

    if (expectedWidth > reqWidth) …
Run Code Online (Sandbox Code Playgroud)

upload android image

73
推荐指数
5
解决办法
7万
查看次数

Android获取相机位图的方向?并向后旋转-90度

我有这个代码:

//choosed a picture
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == RESULT_OK) {
        if (requestCode == ImageHelper.SELECT_PICTURE) {

            String picture           = "";

            Uri selectedImageUri     = data.getData();
            //OI FILE Manager
            String filemanagerstring = selectedImageUri.getPath();
            //MEDIA GALLERY
            String selectedImagePath = ImageHelper.getPath(mycontext, selectedImageUri);

            picture=(selectedImagePath!=null)?selectedImagePath:filemanagerstring;
Run Code Online (Sandbox Code Playgroud)

...

这只是一个图片选择器,来自画廊.这很不错,但是当我在一个imageview上打开这张照片时,带有相机的"PORTRAIT MODE"的图像看起来不错,但带有相机的"LANDSCAPE MODE"的图像在-90度开启.

我怎样才能将这些照片旋转回去?

    Bitmap output       = Bitmap.createBitmap(newwidth, newheight, Config.ARGB_8888);
    Canvas canvas       = new Canvas(output);
Run Code Online (Sandbox Code Playgroud)

我试过这个:

Log.e("w h", bitmap.getWidth()+" "+bitmap.getHeight());
if (bitmap.getWidth()<bitmap.getHeight()) canvas.rotate(-90);
Run Code Online (Sandbox Code Playgroud)

但这不起作用,所有图像大小为:*2560 1920像素(PORTRAIT和LANDSCAPE模式全部)

如何旋转LANDSCAPE图片?

谢谢莱斯利

android

55
推荐指数
3
解决办法
6万
查看次数

处理大型位图

我有一堆图片网址.我必须下载这些图像并逐个显示在我的应用程序中.我正在使用SoftReferences和使用Sdcard 保存集合中的图像,以避免重新获取并改善用户体验.

问题是我对位图的大小一无所知.事实证明,当我使用BitmapFactory.decodeStream(InputStream)方法时,偶尔会出现OutOfMemoryExceptions .因此,我选择使用BitmapFactory Options(样本大小= 2)对图像进行下采样.这提供了更好的输出:没有OOM,但这会影响较小图像的质量.

我该如何处理这类案件?有没有办法选择性地仅对高分辨率图像进行下采样?

performance android bitmap

31
推荐指数
3
解决办法
4万
查看次数

从uri检索位图

我已经包含了"通过myApp共享"选项.我在接收活动类中插入了以下代码.

    // Get the intent that started this activity
    Intent intent = getIntent();
    Uri data = intent.getData();

    // Figure out what to do based on the intent type
    if (intent.getType().indexOf("image/") != -1) {
        // Handle intents with image data ...
}
Run Code Online (Sandbox Code Playgroud)

检索位图图像的下一步是什么?

android android-bitmap

15
推荐指数
2
解决办法
7万
查看次数

Android:获取原始图像的Uri,获取SD卡上的图像缩略图

所以我得到了用户从SD卡中选择的图像的Uri图像.而且我想显示该图像的缩略图,因为很明显,图像可能很大并占据整个屏幕.谁知道怎么样?

android uri image thumbnails

11
推荐指数
2
解决办法
5万
查看次数

如何从Android中的大位图加载切片?

如果我有一个通常会产生"内存不足"异常的大型位图文件,我该如何将其加载为tile?例如,我有10,000x10,000的图像,我想将其分成10x10网格的1,000x1,000像素图块.

我见过这个功能,Bitmap.createBitmap(sourceBitmap, x, y, width, height)但它需要我的大图像作为源输入.

如何在不完全加载输入图像的情况下从输入图像中获取图块?

java android memory-management bitmap

8
推荐指数
1
解决办法
2万
查看次数

将uri转换为Bitmap时出现"无内容提供程序执行"错误

我正在尝试从中检索图像Uri,首先我从图库中选择了图像,然后使用意图传递了imagePath并尝试Uri通过使用此代码获取图像-

        Uri imgUri = Uri.parse(getIntent().getExtras().getString("imageUri"));


        Log.d("" + imgUri, " here it is");


        InputStream PIS;


            try {

                PIS = getContentResolver().openInputStream(imgUri);
                 mImage = BitmapFactory.decodeStream(PIS);


            } catch (Exception e){

                Log.d("go home you're drunk "+e,"");
            Toast toast = Toast.makeText(this, ""+e, Toast.LENGTH_LONG);
            toast.show();

            }
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误

01-19 04:59:50.627 847-858/? I/ActivityManager: START u0 {cmp=pb.imagepicker/.CropActivity (has extras)} from uid 10060 on display 0
01-19 04:59:50.668 6072-6072/? D//storage/emulated/0/DCIM/Camera/IMG_20160118_124651.jpg:  here it is
01-19 04:59:50.668 6072-6072/? D/go home you're drunk java.io.FileNotFoundException: No content provider: /storage/emulated/0?di[ 01-19 04:59:50.769 …
Run Code Online (Sandbox Code Playgroud)

java android bitmap android-emulator

3
推荐指数
1
解决办法
7249
查看次数

将字符串转换为uri到位图以在ImageView中显示

我已经看了一遍解决我的问题,似乎无法弄明白.我敢肯定它可能是1或2条简单的线条,希望有人可以引导我朝着正确的方向前进.

在我的应用中,用户可以单击将打开图库的按钮.一旦他们选择了图像,它就会在我的应用程序中的ImageView中显示该图像.那部分工作得非常好.最初,我只是从画廊返回一个uri,我会直接显示:

imageView1.setImageURI(myUri);
Run Code Online (Sandbox Code Playgroud)

好吧,显然我现在遇到了可怕的"Out Of Memory"错误,如果用户连续多次重新加载该页面,那么我必须清理我的代码以缩小图像.我通过实现一个位图类来实现这一点,该类将图像转换为位图并为我缩小位图.现在,我的ImageView显示代码如下所示:

imageView1.setImageBitmap(bitmap1);
Run Code Online (Sandbox Code Playgroud)

那部分工作正常.这是问题:

我将uri路径转换为字符串,然后将其保存在SharedPreference中.这样当用户退出应用程序并稍后返回时,它们自动显示的图像就会显示出来.我像这样转换uri:

...
selectedImageUri = data.getData();
String selectedImagePath;
selectedImagePath = getPath(selectedImageUri);
...
Run Code Online (Sandbox Code Playgroud)

检索SharedPreference字符串的旧方法,将其转换为uri,然后显示它工作正常.(当然,除了Out Of Memory错误)它看起来像这样:

Uri myUri = Uri.parse(selectedImagePath);
imageView1 = setImageURI(myUri);
Run Code Online (Sandbox Code Playgroud)

"selectedImagePath"显然是我从SharedPreference中检索到的String.再次,这工作正常,但如果重新加载太多次将抛出错误.

现在不工作的部分是当我尝试实现新的Bitmap转换时,我可以缩放位图而不会出现内存错误.这是代码:

Uri myUri = Uri.parse(selectedImagePath)
Bitmap bitmap = getThumbnail(myUri);
imageView1.setImageBitmap(bitmap);
Run Code Online (Sandbox Code Playgroud)

这没什么.原始图像选择显示图像正常但当我返回到此屏幕并尝试从SharedPreference解析字符串然后将其转换为位图时,什么都没有显示."getThumbnail"方法的代码直接来自THIS POST --->

如何从Uri获取位图?

这是第三个答案.

有人有主意吗?对不起,超长的帖子,但我宁愿解释我的问题,而不是提供足够的信息.对不起,如果在其他地方得到了回答.我一直在寻找其他问题几个小时,并没有找到解决我的问题的任何东西.

谢谢.

memory android uri bitmap preference

1
推荐指数
1
解决办法
2万
查看次数

如何将URI转换为位图?

我正在制作一个图像过滤器应用程序,在应用过滤器之前,我将图像裁剪为正方形,我可以使用Soundcloud库像这样裁剪图像:-

private void beginCrop(String sources) {
    img_name = "cropped"+System.currentTimeMillis();
    Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped"+System.currentTimeMillis()));
    Uri source = Uri.parse("file://"+sources);
    Crop.of(source, destination).withAspect(200,200).start(this);
}

private void handleCrop(int resultCode, Intent result) {
    if (resultCode == RESULT_OK) {
        Toast.makeText(this,Crop.getOutput(result).toString(), Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(AlbumActivity.this,FilterImageActivity
                .class);
        intent.putExtra("output_image",Crop.getOutput(result).toString());
        startActivity(intent);
    } else if (resultCode == Crop.RESULT_ERROR) {
        Toast.makeText(this, Crop.getError(result).getMessage(), Toast.LENGTH_SHORT).show();
    }
}}
Run Code Online (Sandbox Code Playgroud)

以及下一个活动是FilterImageActivity.java:-

     @Override
    protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_filter_image);

        String uri = getIntent().getStringExtra("output_image");
        setImageDir(uri);
}
Run Code Online (Sandbox Code Playgroud)

和功能setImageDir():-

 private void setImageDir(String uri)
    {
        Bitmap bitmap = …
Run Code Online (Sandbox Code Playgroud)

java android crop bitmap nullpointerexception

1
推荐指数
1
解决办法
8832
查看次数

在 android 11 中从 uri 创建文件 - getPath() 不起作用

我想在 android 11 的 ActivityResultCallback 中从 uri 创建一个文件。我用它uri.getPath()来将传入的 uri 转换为文件。但是,它在 android 11 中不起作用。这是我的代码:

       private void launchGallery (){
            Intent intent = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            launcherGallery.launch(intent);
        }
    
        ActivityResultLauncher<Intent> launcherGallery = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
                result -> {
                    if (result.getResultCode() == RESULT_OK) {
                        Intent data = result.getData();
                        if (data != null) {
                            Uri imageUri = data.getData();
                            // ---> getPath() won't work in android 11 <---
                            File file = new File(imageUri.getPath());
                            // I don't want to display the image in an ImageView. 
                            // I …
Run Code Online (Sandbox Code Playgroud)

android uri file android-11 registerforactivityresult

1
推荐指数
1
解决办法
5393
查看次数