首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android中能否基于已有的API,实现高效获取一个Bitmap内的黑色像素占比?

在Android中,可以通过已有的API来实现高效获取一个Bitmap内的黑色像素占比。以下是一个简单的示例代码:

代码语言:java
复制
private int getBlackPixelsPercentage(Bitmap bitmap) {
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int totalPixels = width * height;
    int blackPixels = 0;

    for (int x = 0; x< width; x++) {
        for (int y = 0; y< height; y++) {
            int pixelColor = bitmap.getPixel(x, y);
            int red = Color.red(pixelColor);
            int green = Color.green(pixelColor);
            int blue = Color.blue(pixelColor);
            if (red == 0 && green == 0 && blue == 0) {
                blackPixels++;
            }
        }
    }

    return (int) ((float) blackPixels / totalPixels * 100);
}

这段代码首先获取Bitmap的宽度和高度,然后遍历每个像素点,获取其颜色值并检查是否为黑色。如果是黑色,则将黑色像素计数器加1。最后,计算黑色像素占比并返回结果。

需要注意的是,这种方法在处理大型Bitmap时可能会导致性能问题。在实际应用中,可以考虑使用其他优化方法,例如将Bitmap缩小到适当的大小,或者使用多线程并行处理像素。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

安卓 Bitmap 和 Drawable 使用

Bitmap 使用 高效加载大位图 解码大 bitmap,然后加载一个较小图片到内存中去,从而避免超出程序内存限制。...Bitmap 在内存当中占用大小其实取决于: 色彩格式,前面我们已经提到,如果是 ARGB8888 那么就是一个像素4个字节,如果是 RGB565 那就是2个字节 原始文件存放资源目录(是 hdpi...对象一起存放在 Dalvik 堆,而在 3.0 之前,Bitmap 像素数据存放在 Native 内存。...像素格式: 格式 描述 ARGB_8888 ARGB四个通道,每个通道8bit RGB_565 每个像素2Byte,其中红色5bit,绿色6bit,蓝色5bit ALPHA_8 只有一个alpha...Bitmap 是 Drawable。Drawable 不一定是 Bitmap .就像拇指是指头,但不是所有的指头都是拇指一样.

1.1K10

为何大厂图片不会OOM?

如图,bitmap在sdk算是元老级的人物了,从api1就已经有了,可见其重要性。 继承关系就不解释了,实现了Parcelable 具备在内存传递特性。 ?...这里我们看看官方文档怎么说: ? 该方法在api19 之后加入,用来返回一个存储Bitmpa像素信息内存大小, 什么意思呢?...内存相关api到外跟大家分析内存占用, 最终得出结论 Bitmap占用内存= 宽 * 高 * 一像素所占用字节内存 ,如下 2880 * 1800 * 4 = 20736000 可能有的同志发现了...时候已经介绍过了,这里不多说了; 另外 Options 还有一个 inSampleSize 参数,可以实现 Bitmap 采样压缩,这个参数含义是宽高维度上每隔 inSampleSize 个像素进行一次采集...inJustDecodeBound=true 此时并没有正真加载到内存,为了获取bitmap配置信息; 第三步:判断bitmap 能否复用, 方法如下 ?

1.1K20

Android OCR文字识别 实时扫描手机号(极速扫描单行文本方案)

,是纯像素算法,如果能放在jni实现更好,经过我测试效率会快好几倍(Java大概10-50ms,Jni基本在10ms以下,虽然几十毫秒时间差,跟tess-two解析时间,效果不明显),这里还是用...,或者找到了,文字高度还不到解析图片20%, 那这张图片八成是无意义图片,不用解析,直接下一帧(当你对着墙或者什么无聊东西扫描时候, 这里就会直接结束,不会浪费时间去做文字识别)...catchPhoneRect(bitmp,imageView)方法,即可获取一个只包含手机号精准bitmap,如果返回null,表示没有发现符合手机号特征文字块(这里捕获时,是先取图片中间一行像素来初步判断手机号位置...无法识别 这里解决办法就是:通过递归算法,获取一个字符精准位置,在获取位置过程,如果发现宽度或高度延伸到了不合理范围,即视为被水印干扰字符,先跳过这个字符,继续捕捉下一个,直到捕捉到一个没有发现干扰字符...,即超出正常范围黑色像素,会被当作干扰,置为-2,这一步会导致有些被干扰连在一起多个字符都被清空,所以在捕捉其他字符时,当发现没有超出范围,又被置为-2像素,就还原为黑色,这样最终就能实现大部分水印被清除

9K21

Android-图片压缩(二)-纯干货

,这里我将会带着大家做一款压缩工具,功能媲美鲁班压缩,而且还带有鲁班没有的功能,如输出指定格式等,在这个过程我们要学会如何获取bitmap,第一篇已经罗列了多种从项目中取图片转bitmap,这里就不多说了...RGB_565:没有透明度,R=5,G=6,B=5,,那么一个像素5+6+5=16位(2字节),能表示2^16种颜色。...,主要用于存储 1.5 内存Bitmap大小 从网络下载,asset,sd卡取图片计算公式 分辨率 * 每个像素大小(如1080*1920*4B = xxx ) (32/8=4) 从res不同资源目录下...在Android4.0(API 14)之后支持,无损和透明在Android4.3(API18)之后支持 采用webp能够在保持图片清晰度情况下,可以有效减小图片所占有的磁盘空间大小...AndroidBitmap所占内存大小计算方式:图片长度 x 图片宽度 x 一个像素点占用字节数 3、压缩常见方式 质量压缩:降低存储体积(不改变内存Bitmap大小) 采样压缩

85920

全民K歌内存篇3——native内存分析与监控

这个Crash在整体crash很大,通过这个堆栈信息,发现并没有明显指向哪个业务代码。此时,把发生Crash时内存信息上报到后台,分析发现:Crash发生时虚拟内存非常接近4G。 ?...分析发现,业务申请内存主要分布在两部分,即: 程序文件: :应用.dex文件(35%)、加载so文件(7%) 解决方案: 删减代码,减少dex文件内存占用:K歌内有许多旧代码实际已经废弃,...NativeHeap: :业务集成so库内申请和图片(8.0及以上版本)共39% 解决方案:检测、监控申请内存业务,修复不合理申请。...系统 API**版本** 内存占用位置 用户量 Android2.3以前 <=10 native 0% Android3.0-7.1 11~26 java 18% Android8.0及以后 >=27...发现所有的图片创建最终都会走到BitmapFactory.cppdoDecode()函数,通过HeapAllocate等内存分配器来分配内存并存储图片像素数据。

5.1K32

终端图像处理系列 - OpenGL混合模式使用

又作纹理采样输入,如果底图作为输入传入Fragment Shader,则当前FBO需要绑定另一个texture作为输出,否则会出现黑色和黑块兼容性问题。...使用这种混合参数意义也很明显,源色alpha值决定了结果颜色源色和目标色百分。这里源色alpha值为0.8,即结果颜色源色80%,目标色20%。...这里需要注意是,对于有alpha通道BitmapAndroid系统解码API会自动执行预乘操作,即Bitmap每个像素RGB值在解码时会自动乘以当前像素alpha值,也就意味着Bitmap存储...RGB 为255,预乘机制影响导致最终得到结果是63.75,与期望值128.5相会更偏向于黑色,下面是两种结果对比图,第一张是正确结果,第二张是预乘以后结果。...深度缓冲记录了每一个像素距离观察者有多近。在启用深度测试情况下,如果将要绘制像素原来像素更近,则像素将被绘制。否则,像素就会被忽略掉,不进行绘制。

4.6K151

Android终端上视频转GIF实现及GIF质量讨论

该部分数据首先包含一个LZW编码位数,然后是LZW编码后数据索引数,再是每个像素在调色板索引经过LZW编码后值。LZW索引编码最后包含一个终止字节为0。...其中解析视频文件并获得图象序列使用MediaMetaDataRetrieverAPI实现,GIF编码工作使用GIFEncoder实现。下面简要说明一下具体实现。...扩展同时,每个节点对应区域都会统计该区域像素总数以及总误差。 颜色剔除。...RiemersmaGIF ? 使用FFMPEG Android也可以通过使用FFMPEG来实现视频转GIF功能。...结论 Android视频转GIF可以通过Android API和FFMPEG实现,这两种方法相比,FFMPEG效率较高。在生成GIF过程,最关键步骤就是生成调色板以及像素到调色板映射关系。

3.6K110

android学习笔记----关于图形基本处理讲解

android采用图片是png,采用色彩模式是ARGB,其中A( Alpha )是透明度,RGB是红绿蓝。android图片一个像素4个byte。...17之后使用,获取像素宽高包含虚拟键所占空间,在API 17之前通过反射获取 // 获取显示实际大小,而不减去任何窗口装饰或应用任何兼容性缩放因子。...* 其中命名用了SystemClock.uptimeMillis()是当前手机开机时间 * */ // 简单防抖实现...设备分辨率越来越高,屏幕上具有的像素数量这里显示还要多,但是我们暂时先讨论这五大类: 密度独立像素来表示宽度和高度值,也就是说我们可以规定按钮尺寸为 48 x 48 dip,实际上 Android...17之后使用,获取像素宽高包含虚拟键所占空间,在API 17之前通过反射获取 // 获取显示实际大小,而不减去任何窗口装饰或应用任何兼容性缩放因子。

57720

Android高效内存2:让图片占用尽可能少内存

2.5.2 RGB在计算机颜色值数字化编码   在不考虑透明度情况下,一个像素颜色值在计算机表示方法有以下3种: 浮点数编码:比如float: (1.0, 0.5, 0.75),每个颜色分量各占...,int类型变量32位,short和char类型变量都在16位,因此可以看出,用浮点数表示法编码一个像素颜色,内存占用量是96位即12字节;而用24位整数表示法编码,只要一个int类型变量,占用...在Android获取Bitmap时候一般也采用整型编码。...2.5.4 降低要显示图片色彩质量   采用低内存占用量编码方式,比如Bitmap.Config.ARGB_4444Bitmap.Config.ARGB_8888更省内存; 1920*1200图片...不要盲目加一个大图到Android项目中,能使用.9进来使用,而且.9图本身尽可能小,另外能使用绘制实现就不要加一个图片资源。

1.6K110

Android关于Color你所知道和不知道一切

RGB.png RGB位数: RGB还有位数区别,也就是一个颜色几位,一般是8位, 也就是用1个字节表示一种颜色(一个字节8位) 1个字节(8位)每种颜色有0~255共256种颜色,三色共表达...Color 颜色使用场景: 1.基本使用:背景、阴影、文字颜色 2.基于Color创建Bitmap以及叠合模式:Xfermode 3.paint着色、颜色过滤器 4.ColorMatrix...,毕竟就是一个int而已,难点在于颜色拼合与变换 二、Android位图封装类:Bitmap 什么是位图,前面讲过颜色是按位存储,ARGB_8888每种颜色8位 相信大家都知道一张jpg或...png放大后会是一个个小格子,称为一个像素(px),而且一个小格子是一种颜色 也就是一张jpg或png图片就是很多颜色合集,而这些合集信息都被封装到了Bitmap 你可以使用Bitmap获取任意像素点...像素.png 1.重新认识Bitmap 我们一般使用Bitmap是都是用BitmapFactory来decode资源,所以并未设计太多Bitmap操作,以致认为Bitmap=图片 Bitmap实际是一个封装图片像素信息

2.5K40

精选Android初中级面试题 (三): 深探Handler,多线程,Bitmap

2、一个线程能否创建多个Handler,Handler跟Looper之间对应关系 ? 参考回答:一个Thread只能有一个Looper,一个MessageQueen,可以有多个Handler。...Android线程池都是直接或间接通过配置ThreadPoolExecutor来实现不同特性线程池.Android中最常见类具有不同特性线程池分别为: newCachedThreadPool:...优点:执行定时任务以及有固定周期重复任务 newSingleThreadExecutor:只有一个核心线程,确保所有的任务都在同一线程按序完成 优点:不需要处理线程同步问题 通过源码可以了解到上面的四种线程池实际上还是利用...在Bitmap里有两个获取内存占用大小方法。 getByteCount():API12 加入,代表存储 Bitmap 像素需要最少内存。...getAllocationByteCount():API19 加入,代表在内存Bitmap 分配内存大小,代替了 getByteCount() 方法。

73820

Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同 Bitmap 复用策略 | 工具类代码 )

文章目录 一、Bitmap 复用池 二、弱引用 Bitmap 内存释放 三、从 Bitmap 复用池中获取对应可以被复用 Bitmap 对象 1、Android 2.3.3(API 级别 10)及以下版本...Bitmap 复用池 : 加载图片时 , 使用 inBitmap 复用选项 , 需要获取图片时 , 优先从 Bitmap 复用池中查找复用存在 Bitmap 对象 ; 假如 Bitmap 对象长时间不使用..., 此时开启一个线程 , 不断从 ReferenceQueue 调用 remove 方法获取被释放内存对象 , 如果获取到了非空内容 , 说明有一个 Bitmap 弱引用对象被释放了 , 拿到该对象引用...复用池中获取对应可以被复用 Bitmap 对象 ---- 根据不同系统版本进行不同处理 : 1、Android 2.3.3(API 级别 10)及以下版本 Android 2.3.3(API 级别...10)及以下版本 : 使用 Bitmap 对象 recycle 方法回收内存 ; // Android 2.3.3(API 级别 10)及以下版本 , 使用 Bitmap 对象

2.1K20

Matrix ResourceCanary -- Activity 泄漏及Bitmap冗余检测

对于第二个问题,乍一看 Dalvik 或 ART 虚拟机 GC 机制我们是没法直接干预,而且 Android Framework 也没有提供任何API让我们直接得知一个对象已被 GC ,但熟悉 Java...另外,由于我们暂时还没发现即时得知一个 Bitmap 是否冗余方法,因此监测阶段我们并不特别为冗余 Bitmap 设计监测逻辑,留待分析阶段来获取所有冗余 Bitmap 对象信息。...从 Hprof 文件获取所有冗余 Bitmap 对象以及它们强引用链(即图像数据完全相同 Bitmap 对象) GC Root GC Root 是指这样一类对象,他们本身并不被其他生命周期更长对象持有...从 Hprof 文件获取所有冗余 Bitmap 对象 这个功能 Android Monitor 已经有完整实现了,原理简单粗暴——把所有未被回收 Bitmap 数据 buffer 取出来,然后先对比所有长度为...由于监测步骤监测是 Activity 泄漏这个 Android 系统特有的概念,因此不得不依赖系统环境;但分析步骤只是一个处理 Hprof 文件过程,完全不需要依赖 Android 系统,理论上将这两部拆开是完全可行

3.4K61

OpenCV | 基于Android系统详析Mat与Bitmap对象(创建、初始化、使用与转换 | 附大量demo)

---- 2.1 图像文件与资源加载 在Android系统, 可以把给定图像文件路径或者图像资源ID作为参数, 通过调用API实现文件加载,使目标图片成为一个Bitmap实例对象。...(bm); } ---- 2.2 读写像素Bitmap对象,首先可以通过相关API查询到图像长、宽、配置信息; 在Bitmap像素数据是最内存部分; 根据长、宽与配置信息可以计算出图像像素大小为多少...上述代码参数具体分析如下: ·ARGB_4444:表示每个通道四位,总计两个字节,表示一个像素图像。 ·ARGB_8888:表示每个通道八位,总计四个字节,表示一个像素图像,这个是最常见。...---- 3.2 在Canvas上绘制基本几何形状与文本 AndroidBitmap上绘制几何形状与文本对象,要借助Canvas相关API实现; 首先准备好一个Bitmap对象; 再用准备好Bitmap...} 综上, Android中提供基于CanvasAPI完整地实现了图形绘制功能, 当用OpenCV在Android做开发时,若需绘制复杂几何图形或中文文字, 优先选择本地Canvas API

6.3K63

Android-Bitmap

ALPHA_8含义:ALPHA代表该像素只保存透明度,所以其每单位像素计算公式为: 单位像素ALPHA_8占位计算为8bit等于1byte内存 Android图片有四种颜色格式 ?...API19获取Bitmap内存大小:"+bitmap.getAllocationByteCount()); } if (Build.VERSION.SDK_INT >...= Build.VERSION_CODES.HONEYCOMB_MR1) { Log.e(TAG, "API12获取Bitmap内存大小:"+bitmap.getByteCount...(2):同一图片,放在 res 相同资源目录下,但在不同 dpi 设备,图片占用内存空间也是会不一样。...我们都知道在Android3.0以前Bitmap是存放在内存,我们需要回收native层和Java层内存,在Android3.0以后Bitmap是存放在堆,我们只要回收堆内存即可,官方建议我们

1.4K20

Bitmap异步加载和缓存

内容概述 [翻译]开发文档:android Bitmap高效使用 本文内容来自开发文档“Traning > Displaying Bitmaps Efficiently”,包括大尺寸Bitmap高效加载...内存缓存 从Android 2.3 (API Level 9)开始,GC对Soft/WeakReference回收更加频繁,所以基于这些引用缓存策略效果大打折扣。...可以增加一个磁盘缓存策略,这样可以缓存更多内容,而且依然提供网络获取数据更好速度。如果图片被访问非常频繁,也可以考虑使用ContentProvider实现图片数据缓存。...首先,Bitmap内存管理在不同android版本默认策略不同: 在android 2.2(API 8)及更低版本,GC回收内存时主线程等待,而之后3.0 (API level 11)引入了并发垃圾回收线程...在2.3.3 (API level 10)版本及以前,Bitmap对应图片像素数据是native内存存储,和Bitmap对象(在Dalvik堆内存)是分开

1.8K50

Android系统Bitmap内存分配原理与优化

在这篇文章,笔者将讲解一张看似普通Bitmap对内存占用,介绍Android Studio帮助我们分析图片占用内存工具,举例说明流行两大图片加载框架:Glide、Picasso在加载图片时使用内存不同方式...拿钢铁侠这张图片举例,它尺寸是350*350,可以看到在电脑磁盘上,它只36KB空间。 我们创建一个简单Demo,页面正中央是一个ImageView,用于显示这张钢铁侠图片。...方式一:通过Android Studio直接查看 如果dump文件来源自Android版本为7.1.1(Android N,API=25)及以下设备,可以使用这种方法。...选中Bitmap对象,直接在窗口Bitmap Preview查看图片内容(如上图),非常方便。...答案是有的基于两步简单推导: 图片所在资源目录、设备密度两者决定图片最终显示在屏幕上像素尺寸; 像素尺寸、图片质量共同决定分配内存。 其中第2点已经在上文讲解过,这里主要分析第1点。

1.1K20

(转载非原创)Android系统Bitmap内存分配原理与优化

在这篇文章,笔者将讲解一张看似普通Bitmap对内存占用,介绍Android Studio帮助我们分析图片占用内存工具,举例说明流行两大图片加载框架:Glide、Picasso在加载图片时使用内存不同方式...拿钢铁侠这张图片举例,它尺寸是350*350,可以看到在电脑磁盘上,它只36KB空间。 我们创建一个简单Demo,页面正中央是一个ImageView,用于显示这张钢铁侠图片。...方式一:通过Android Studio直接查看 如果dump文件来源自Android版本为7.1.1(Android N,API=25)及以下设备,可以使用这种方法。...选中Bitmap对象,直接在窗口Bitmap Preview查看图片内容(如上图),非常方便。...答案是有的基于两步简单推导: 图片所在资源目录、设备密度两者决定图片最终显示在屏幕上像素尺寸; 像素尺寸、图片质量共同决定分配内存。 其中第2点已经在上文讲解过,这里主要分析第1点。

64820
领券