Articles of android bitmap

BitmapFactory意外地下采样图像

在我的Android应用程序中,我上传并下载JPEG图像。 对于某些图像, BitmapFactory对下载的图像进行下采样,我不明白为什么以及如何阻止它这样做。 我上传和下载图像时记录Bitmap对象大小: Uploading image with size 3840×2160 Opening received image of size 2601584B degradation 0 decoded 384×216 因此,在使用BitmapFactory解码后,我的图像宽度和高度除以10。 对于另一个图像,我从3480×4640转到217×290,因此除以16。我首先想到它可能是由图像dpi元数据引起的,所以我尝试使用以下代码打开图像时强制它: BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 1 << degradation; opts.inScaled = false; opts.inDensity = 1; opts.inTargetDensity = 1; opts.inScreenDensity = 1; final Bitmap original = BitmapFactory.decodeByteArray(data, 0, data.length, opts); Log.d(Tags.IMAGES, "Opening received image […]

将Android Bitmap转换为OpenCV Mat并向后转换

我想简单地将位图从Android转换为OpenCV的Mat对象。 Stack Overflow上经常讨论此主题。 例如: 将Mat转换为Android的Bitmap Opencv ; 使用Android相机捕获图像后将Bitmap转换为Mat ; templateMatching mattoBitmap opencv for android 还有更多要找。 我在这个答案中遵循了这些内容,但我仍然无法以正确的方式完成任务。 最小代码: //First convert Bitmap to Mat Mat ImageMat = new Mat ( image.getHeight(), image.getWidth(), CvType.CV_8U, new Scalar(4)); Bitmap myBitmap32 = image.copy(Bitmap.Config.ARGB_8888, true); Utils.bitmapToMat(myBitmap32, ImageMat); //Do smth. Imgproc.cvtColor(ImageMat, ImageMat, Imgproc.COLOR_RGB2GRAY,4); //Then convert the processed Mat to Bitmap Bitmap resultBitmap = […]

如何使用Picasso将位图加载到图像视图中

是的,我正在使用Picasso来加载位图。 原因是我在我的适配器的一部分解码URI,并在另一部分加载位图,我在这里读到 即使您的URL为空,也应始终致电Picasso。 这样它就知道图像视图被回收了。 所以我试过这个…. Bitmap bitMap; … Picasso.with(getContext()) .load(bitMap) .into(imageView); 但我得到了这个错误 无法解析方法’load(android.graphics.Bitmap)’

在CustomView中连续绘制时性能不佳

使用案例: 我需要在我的视图上画出数百行和几段文字。 我需要给出一个滚动效果,为此我捕获ACTION_MOVE事件并使用更新的点重绘所有行。 为了得到欲望的结果,我尝试了不同的方法但没有按预期工作。 方法1 我创建了一个扩展View的自定义类。 所有绘图和计算都直接在我的onDraw()方法中完成。 由于在onDraw()方法中完成了大量操作,因此应用程序的性能非常差。 我甚至使用Profile GPU渲染检查了性能,我可以看到线条非常高。 方法2 我创建了一个Bitmap,在将所有行绘制到另一个线程中的位图之后,我使用postInvalidate()在onDraw()方法中绘制位图: mBufferedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); mBufferedBitmap.eraseColor(Color.TRANSPARENT); Canvas mBufferedCanvas = new Canvas(mBufferedBitmap); drawLines(mBufferedCanvas) postInvalidate(); 由于我擦除了位图上的所有先前图形并使用更新的点绘制新线条,因此屏幕上会出现闪烁。 方法3 我尝试将自定义类扩展到SurfaceView并在另一个线程中对canvas对象执行所有操作。 但由于SurfaceView使用CPU进行绘图操作,因此低配置手机的性能会很差。 谁能指导我如何以更好的性能完成这项任务?

ImageView.setImageBitmap()是否回收先前设置的位图?

假设我的代码类似于下面的代码: protected void onCreate(Bundle bundle){ this.imageView = (ImageView) contentView.findViewById(R.id.imageView); this.setFirstBitmap(); this.setSecondBitmap(); } private setFirstBitmap(){ Bitmap bitmap1 = BitmapFactory.decodeFile(bitmapFile1); imageView.setImageBitmap(bitmap1); } private setSecondBitmap(){ Bitmap bitmap2 = BitmapFactory.decodeFile(bitmapFile2); imageView.setImageBitmap(bitmap2); } 在这种情况下,imageView回收bitmap1还是我必须在设置bitmap2之前做到这一点?

不是DRM文件,正常开放

我正在寻找一个关于通过调用BitmapFactory.decodeFile引起的重复日志打印的解决方案。 在我的应用程序中,我有一个每秒由计时器重绘的ListView 。 ListView有一个ImageView ,它从本地存储获取图像源(而不是来自网络) 图像存储在: filePath = /data/data/com.xxx.testlib/files/b22a1a294fd6e5ad3ea3d25b63c4c735.jpg 我使用以下代码重绘图像,它工作正常。 毫无例外。 try { File filePath = context.getFileStreamPath(imageName); if(filePath.exists()){ bMap = BitmapFactory.decodeFile(filePath.getPath()); } }catch (Exception e) { e.printStackTrace(); } 但是在执行以下行时: bMap = BitmapFactory.decodeFile(filePath.getPath()); 我在日志中看到如下打印: 03-07 09:55:29.100: I/System.out(32663): Not a DRM File, opening notmally 03-07 09:55:29.105: I/System.out(32663): buffer returned …. 如何从打印到日志中读取。 谢谢你 编辑 每当执行此操作时,它也会滞后于手机。 特别是当电话被Waked up时,这种降低的性能是显而易见的,我们使用此代码返回活动。 它已超过一年的OP,但仍未find答案。 […]

水平或垂直翻转位图图像

通过使用此代码,我们可以旋转图像: public static Bitmap RotateBitmap(Bitmap source, float angle) { Matrix matrix = new Matrix(); matrix.postRotate(angle); return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true); } 但是,我们如何水平或垂直翻转图像?

防止位图太大而无法上传到纹理android

我需要以图库forms全屏显示原始图像。 对于拇指,它将完美地工作,当我尝试使用原始源以全屏显示该图像时,它将无法显示。 在大多数情况下,如果图像分辨率大于2000,那么它将显示错误位图太大而无法上传到纹理android 。 我想阻止这一点,我搜索谷歌但没有得到任何答案。

从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 … } 检索位图图像的下一步是什么?

如何在Android上检查Bitmap是否为空(空白)

如何检查Bitmap对象是否完全空白,即它的所有像素都是透明的,每个像素上都没有xy循环?