Articles of 位图

从自定义SurfaceView获取位图

我在扩展表面视图和实现runnable的类中有这个代码我能够使用类基本上允许你使用不同的颜色等绘制到canvas。 我正在尝试获得一种方法,允许我在绘制图像后保存图像,这是方法。 无论我做什么,我只是得到一个黑色的图像,没有任何东西。 有任何想法吗? 我启用了缓存绘图 目标从自定义SurfaceView获取位图图像我已经用尽了在这里查看其他post的选项,但没有find任何可行的工作。 这是希望最近有一个新的解决方案。 非常感谢 public Bitmap getImage() { Bitmap bitmap = Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); this.draw(canvas); return bitmap; }

用Picasso加载位图

我正在使用Picasso库在viewpager中加载图像,但是我需要加载一个位图而Picasso只接受Filevariables。 如何使用Picasso加载位图文件? Bitmap imagescompress = decodeSampledBitmapFromResource(getResources(), AnohanaAdapter.imagep[position], 100, 100); 如果我把imagecompress放在Picasso的加载函数中,我就是这个错误:无法解析方法’load(android.graphics.Bitmap)’。 实际上对于加载图像我使用下面的代码: Picasso.with(VistaSingola.this).load(AnohanaAdapter.imagep[i]).placeholder(R.drawable.ic_launcher).error(R.drawable.error).fit().into(imageViewTouch); 但是图像很大,我不想进入OutOfMemory。 有人可以帮帮我吗? 请。 谢谢大家的帮助

缩放位图的方法之间的区别

在Android中至少有两种缩放位图的方法,一种是在解码位图源时使用“BitmapFactory.Options”中的“inScaled,inDensity,inTargetDensity”。 另一种是在“Bitmap.createBitmap”中使用“Matrix”。 我很好奇的是这两种方法的区别是什么? 生成的位图的质量如何? 那么内存使用情况呢? 等等…

如何找出Android 2的位图有多少可用堆大小?*?

我们的应用程序使用了很多位图。 它适用于例如G1,XOOM。 但是在HTC Desire上有一个OutOfMemory错误。 在代码中我们使用try / catch(OutOfMemoryError e)并且所有设备(Desire除外)抛出exception,但HTC只是在没有OOMexception的情况下杀死应用程序。 我们将位图的内存限制在12 Mb,似乎这个解决方案解决了问题,但客户仍然在HTC Desire HD上遇到问题。 即使有12 Mb的限制也有OOM。 这是日志: 06-07 12:03:43.978 E/dalvikvm-heap( 29616):1140128-byte external allocation too large for this process. 06-07 12:03:43.978 E/dalvikvm( 29616):Out of memory: Heap Size=12311KB, Allocated=9420KB, Bitmap Size=12139KB, Limit=21884KB 06-07 12:03:43.978 E/dalvikvm( 29616):Trim info: Footprint=15751KB, Allowed Footprint=15751KB, Trimmed=3440KB 06-07 12:03:43.978 E/GraphicsJNI( 29616):VM won’t let us allocate […]

如何在android中的第一个图像上的选定点合并两个位图?

我如何将两个不同的图像合并为一个。 此外,我需要在第一个图像上的特定点合并第二个图像。 它在android中是否可行?

Facebook图像为大图标通知在不同的手机上显示为白色?

我遇到了正确创建和发送通知的问题。 我在这里阅读了新的Lollipop 5.0 update通知设计规范: https : //material.google.com/style/icons.html和https://material.google.com/patterns/notifications.html ,我意识到图标需要是white ,以便正确显示。 这很好,我完全理解,但我希望我的通知显示一张图片,显然不能是白色的。 然而,令我感到困惑的是,当我尝试在手机上呈现通知时,一切正常。 它看起来像这样: 但是,在我朋友的手机上,它看起来像一个白色方块,如下所示: 这很奇怪,因为我们都有相同版本的Android,版本6.0.1。 这是我用来发送通知的代码: private class NotificationPicture extends AsyncTask { Context context; String userId; String postId; String name; String notificationBody; String from; public NotificationPicture(Context context) { super(); this.context = context; } @Override protected Bitmap doInBackground(String… params) { userId = params[0]; postId = params[1]; name […]

StateListDrawable和平铺位图

这是我的自定义选择器(StateListDrawable) common_cell_background和common_cell_background_highlight都是XML。 代码如下: common_cell_background.xml common_cell_background_highlight.xml 位图也完全相同。 亮点只是稍​​微轻一点,没有其他差异。 两个位图都是PNG文件。 现在我开始了 convertView.setBackgroundResource(R.drawable.list_item_background); 这是问题所在。 我的common_cell_background没有重复,它被拉长了。 但是当我触摸列表背景的单元格时,令人惊讶的是变为common_cell_background_highlight并猜测是什么? 一切都很好,它应该像它应该的那样重复。 我不知道问题出在哪里,为什么我的背景不会重复突出显示。 有什么想法吗?

如何在Android中创建可resize的ImageView

我希望我的应用程序的用户能够在运行时修改图像。 用户应该能够通过点击图像视图的角落并拖动它来修改图像的高度和宽度,如下图所示: 我花了很多时间研究这个,我发现了多点触控的感觉,并将一个大的位图文件调整为缩放输出文件 ,如Pinch Zoom,但这些都不符合我的要求。 目前我正在调整位图使用下面的结果和改变宽度的onprogress改变方法的搜索栏而不是帧。 通过使用此function,更改图像大小不能正常工作。 public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){ try { //Decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(f),null,o); //The new size we want to scale to final int REQUIRED_WIDTH=WIDTH; final int REQUIRED_HIGHT=HIGHT; //Find the correct scale value. It should be the power of 2. […]

寻找Android的“杀手级”内存缓存机制

背景 Android的最大堆大小非常有限,每个设备都有不同的最大堆。 某些应用程序需要能够将内容(通常是图像)缓存在内存中,而不仅仅是内部/外部存储上。 当然,有很多关于处理位图和使用尽可能少的内存的好技巧 ,但缓存也是必需的。 问题 我已经阅读了许多可能的缓存解决方案,但没有一种提供一种缓存,这将成为一种杀手级的缓存解决方案。 我想要的是一个具有下一个function的缓存机制: 无限制地使用堆,而不必担心内存不足。 应用需要内存,没有足够的可用内存? 所以释放一些(未引用的)项目(及其密钥)。 线程安全/并发。 提供基于LRU的缓存,以便最近使用的项目具有更高的停留机会。 尽可能保持活力(但不会造成任何崩溃)。 然而,遗憾的是,在Android上,与Java相比,软/弱引用很快就被GC编辑了。 能够处理隐藏其实际大小的对象。 在Android上,在API 10及更低版本中,位图没有使用堆内存但被认为是这样,因此VM无法知道何时释放它们,因为它认为使用相同数量的内存作为单个引用(4字节左右)。 这就是为什么有些解决方案可以人为地告诉每个项目的大小,以及在删除它时该怎么做。 一些好的解决方案 LruCache – API 12中的一个类(您可以轻松复制其代码)。 优点:#2(?),#3,#5。 缺点:#1,#4,加上你需要复制它的源代码,因为它是在API 12上呈现的。 一个散列映射,其值为软/弱引用 ,如第50页所示,取自本讲座 。 优点:#1(但不删除键),#2(需要使用ConcurrentHashMap ) 缺点:#3,#4,#5 MapMaker (可从guava库获得 ),它类似于以前解决方案的高级版本。 优点:#1,#2 缺点:#3,#4,#5 通过番石榴库缓存解决方案 。 优点和缺点取决于您的选择。 不确定哪种配置最符合需求,以及它是否适用于Android。 可悲的是,即使为Android编译库也无法成功。 Android查询 – 不确定它是如何工作的。 看起来很容易使用,但不确定它的优点和缺点。 题 有人知道一个杀手缓存机制吗? 我不太关心function#5,因为它非常先进,并且随着越来越多的人拥有更新的Android版本,将来也不会那么需要。

访问ARGB_8888 Android Bitmap中的原始数据

我试图使用copyPixelsToBuffer和copyPixelsFromBuffer方法在Android上访问ARGB_8888格式的Bitmap的原始数据。 但是,调用这些调用似乎始终将alpha通道应用于rgb通道。 我需要一个byte []或类似的原始数据(通过JNI;是的,我知道Android 2.2中的bitmap.h,不能使用它)。 这是一个示例: // Create 1×1 Bitmap with alpha channel, 8 bits per channel Bitmap one = Bitmap.createBitmap(1,1,Bitmap.Config.ARGB_8888); one.setPixel(0,0,0xef234567); Log.v(“?”,”hasAlpha() = “+Boolean.toString(one.hasAlpha())); Log.v(“?”,”pixel before = “+Integer.toHexString(one.getPixel(0,0))); // Copy Bitmap to buffer byte[] store = new byte[4]; ByteBuffer buffer = ByteBuffer.wrap(store); one.copyPixelsToBuffer(buffer); // Change value of the pixel int value=buffer.getInt(0); Log.v(“?”, “value before […]