标签: android-image

加载没有OutOfMemoryError的大图像

我有一个5000 x 4000 px图像,我想画在画布上.

首先,我尝试从资源加载它.我把它放进去了/res/drawable.

我使用以下方法:

InputStream input = getResources().openRawResource(R.drawable.huge_image);
Drawable d = Drawable.createFromStream(input, "image");
d.setBounds(...);
d.draw(canvas);
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力.

在这种情况下,InputStream是一个AssetManager.AssetInputStream.

所以现在我想从SD卡加载它.

这是我试图做的事情:

File f = new File(path);
Uri uri = Uri.fromFile(f);
InputStream input = mContext.getContentResolver().openInputStream(uri);
Drawable d = Drawable.createFromStream(input, "image");
Run Code Online (Sandbox Code Playgroud)

在这种情况下InputStream是a FileInputStream,我OutOfMemoryError在创建时得到了Drawable.

所以我想知道:

有没有办法加载图像而不会出现错误?或者有没有办法将a转换FileInputStreamAssetInputStream

注意:

我不想调整图像大小,因为我正在实现缩放/平移功能.请不要告诉我阅读有效加载大位图.

你可以在这里查看全班.使用时发生错误setImageUri().

这是我的错误日志:

08-13 11:57:54.180: E/AndroidRuntime(23763): FATAL EXCEPTION: main
08-13 11:57:54.180: E/AndroidRuntime(23763): java.lang.OutOfMemoryError: …
Run Code Online (Sandbox Code Playgroud)

java android android-image android-canvas

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

有没有办法裁剪 Image/ImageProxy (在传递给 MLKit 的分析器之前)?

我将CameraX的分析器用例与 MLKit 的BarcodeScanner. 我想先裁剪从相机接收到的图像的一部分,然后再将其传递到扫描仪。

我现在正在做的是将ImageProxy(我在分析器中收到的)转换为Bitmap,裁剪它,然后将其传递给BarcodeScanner. 缺点是这不是一个非常快速和有效的过程。

我还注意到运行此代码时 Logcat 中收到的警告:

ML Kit 检测到您似乎将相机帧作为位图对象传递给检测器。这是低效的。请对camera2 API使用YUV_420_888格式,对(旧)相机API使用NV21格式,并将字节数组直接传递给ML Kit。

不进行转换固然很好ImageProxy,但是如何裁剪我想要分析的矩形呢?

我已经尝试过设置(imageProxy.image.cropRect) 类cropRect的字段Image,但它似乎并不影响最终结果。

android android-image android-camera2 android-camerax google-mlkit

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

在Android中使用矢量drawable和一组.png的图标有什么区别?

使用vector drawables和使用一组.pngAndroid系统图标有什么优缺点?

如果它们用于两种不同的东西,那是什么?

png android android-image android-drawable

14
推荐指数
2
解决办法
6164
查看次数

Android文件提供程序非法参数异常

我正在使用文件提供程序将照片保存到给定目的地.我明白了:

java.lang.IllegalArgumentException:尝试打开活动以从摄像头捕获图像时缺少android.support.FILE_PROVIDER_PATHS元数据.

我的manifest.xml文件:

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example"
android:exported="false"
android:grantUriPermissions="true">
    <meta-data
    android:name="android.support.FILE_PROVIDER_PATHS"
    android:resource="@xml/paths" />
</provider>
Run Code Online (Sandbox Code Playgroud)

我的paths.xml文件:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="content" path="Android/data/com.my_package_name/files/" />
</paths>
Run Code Online (Sandbox Code Playgroud)

和Java代码:

File externalFilesDirectory = this.getExternalFilesDir(null);
File imageFile = File.createTempFile(
        imageFileName,
        ".jpg",
        externalFilesDirectory
);
Uri photoURI = FileProvider.getUriForFile(this, "com.example", imageFile);
Run Code Online (Sandbox Code Playgroud)

最后一行给出了例外.我在这里错过了什么?我已经关注了官方Android开发网站的教程(https://developer.android.com/training/camera/photobasics.html)

android android-image android-xml android-file android-fileprovider

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

通过Intent with Image插入联系人(ContactsContract)(照片)

有许多Q&A线程,但没有一个提供真正的答案,或者我找不到它.

为了确保你,我先问了一下:

那么有谁知道如何使用Intent(如示例代码中)并插入一个Photo,它是在Bitmap中保存的?

示例代码我现在用它来启动对话意图,让用户在保存之前插入或取消并可能编辑字段:

// PrivateContactClass c;
// Bitmap photo;
Intent inOrUp = new Intent(ContactsContract.Intents.Insert.ACTION, ContactsContract.Contacts.CONTENT_URI);
inOrUp.setType(ContactsContract.Contacts.CONTENT_TYPE);
inOrUp.putExtra(ContactsContract.Intents.Insert.NAME, ModelUtils.formatName(c));
inOrUp.putExtra(ContactsContract.Intents.Insert.PHONE, getPrimaryPhone());
inOrUp.putExtra(ContactsContract.Intents.Insert.TERTIARY_PHONE, c.getMobile());
inOrUp.putExtra(ContactsContract.Intents.Insert.EMAIL, c.getMail());
inOrUp.putExtra(ContactsContract.Intents.Insert.JOB_TITLE, c.getFunction());
inOrUp.putExtra(ContactsContract.Intents.Insert.NOTES, getSummary());
inOrUp.putExtra(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
startActivity(inOrUp);
Run Code Online (Sandbox Code Playgroud)

由于Julien的回答,我找到了解决方案

不仅仅使用intent,因为我怀疑我们可以传递Data ContentProvider保存的图像ID,或者直接在Intent中传递Bitmap.

从上面的代码扩展

将startActivityForResult与常量请求代码一起使用

// must be declared in class-context
private static final int CONTACT_SAVE_INTENT_REQUEST = 1;
...
startActivityForResult(inOrUp,CONTACT_SAVE_INTENT_REQUEST);
Run Code Online (Sandbox Code Playgroud)

添加Intent启动的活动的处理结果

@Override
protected void onActivityResult(int requestCode, int resultCode,
        Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent); …
Run Code Online (Sandbox Code Playgroud)

android android-intent contactscontract android-image android-contentprovider

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

Android通知大图片尺寸

我试图在Android通知上找到大图片风格图片的确切尺寸.实际上,我需要这些以便在正确的维度上即时计算图像,以避免在我的应用程序中下载太多.

我做了一些测试,例如,我不能将屏幕的宽度作为图像的宽度,因为通知中心并不完全适合平板电脑上的屏幕.

是否有任何方法可以获得这些尺寸,就像我们对带有android.R.dimen.notification_large_icon_width和的大图标一样android.R.dimen.notification_large_icon_height

谢谢

android android-image android-notifications

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

毕加索可以为我排队吗?

这是关于毕加索行为的一个关键点我不知道.

想象一下,你正在展示十件物品的幻灯片.比如,他们在屏幕上各持有十秒钟.

理想的行为是这样的:在幻灯片放映开始时,我只是执行以下操作:

picasso.get( url1 )
picasso.get( url2 )
picasso.get( url3 )
picasso.get( url4 )
picasso.get( url5 )
picasso.get( url6 )
picasso.get( url7 )
picasso.get( url8 )
picasso.get( url9 )
picasso.get( url10 )
Run Code Online (Sandbox Code Playgroud)

事实上,毕加索会一次一个地排队.

毕加索的行为是什么,如果我告诉它一次预热10个网址?

是否有可能让毕加索一次只做一件事,按顺序 - 是否有这样的选择?

(产生的其他问题是,你可以取消队列,还是......?)


壁画

感谢@alicanozkara在这个页面上的惊人答案我第一次了解到

https://github.com/facebook/fresco

(13k星)无论好坏,我认为毕加索时代可能已经结束了.

android image image-loading android-image picasso

13
推荐指数
3
解决办法
964
查看次数

ImageView坐标和位图像素之间的对应关系 - Android

在我的应用程序中,我希望用户能够选择一个包含在其中的图像的某些内容ImageView.

要选择内容,我将该ImageView类子类化,使其实现,OnTouchListener以便在其上绘制一个由用户决定的带边框的矩形.

下面是绘图结果的示例(要了解它的工作原理,您可以将其视为在桌面上单击鼠标并拖动鼠标时):

enter image description here

现在我需要确定哪些像素的的Bitmap图像对应于所选择的部分.很容易确定哪些是ImageView属于矩形的点,但我不知道如何获得对应的像素,因为它ImageView具有与原始图像不同的纵横比.

我遵循这里特别描述的方法,但也在这里,但我并不完全满意,因为在我看来,对应关系是在像素和点之间的1对1 ImageView,并没有给我原始图像上的所有对应像素到选定的区域.

hoveredRect在其ImageView内部的点上调用矩形是:

class Point {
    float x, y;
    @Override
    public String toString() {
        return x + ", " + y;
    }
}

Vector<Point> pointsInRect = new Vector<Point>();

for( int x = hoveredRect.left; x <= hoveredRect.right; x++ ){
    for( int y = hoveredRect.top; y <= hoveredRect.bottom; y++ ){

        Point pointInRect = new Point();
        pointInRect.x …
Run Code Online (Sandbox Code Playgroud)

java android android-image android-imageview

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

如何使用通用图像加载器

我有我需要加载的缩略图的要求和TextListView其被通过自定义设置Adapter.缩略图应存放在缓存中,供我使用的通用图像装载机不过我在它的实现非常困惑,以及如何在使用它按我的要求来加载图像ListViewURL.请通过良好的实施建议我一些方法.

android android-image android-listview android-adapter

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

如何更改ic_launcher_round.png文件夹内容?

我在更改Android应用程序的图标时遇到了困难.我遵循了指示:

1.Right click on the project
2.Select New -> Image Asset
3.Select 'Asset Type' as Image
4.Select Path of and .png image
5.Optional: padding, trimming etc.
6.Next and Finish
Run Code Online (Sandbox Code Playgroud)

这改变了minmap/ic_launcher.png内容中的图标,但是,这不会更改minmap/ic_launcher_round.png文件夹内容.这样,如果Android系统配置为显示圆形图标,则此文件夹中显示的图标:minmap/ic_launcher_round.png.但我找不到改变该特定文件夹内容的方法.

我试图在Path中选择一个圆形图像,但stil不起作用.

如果我将我的Android手机设置为显示应用程序启动器图标为方形,我会看到所需的图标,但是,如果它被更改为圆形,则我看不到我想要的图标.

请指导如何更改圆形ic_launchers.

谢谢

android android-image android-icons android-drawable

12
推荐指数
2
解决办法
8746
查看次数