热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaBitmap位图使用

文章目录1.数据结构的定义2.查询方法的实现3.修改方法的实现        在Java中使用byte[]字节数组来储存bit,1byte=8bit。对于bit中的第i位,该bit

文章目录





    • 1. 数据结构的定义

    • 2. 查询方法的实现

    • 3. 修改方法的实现



        

在Java中使用byte[]字节数组来储存bit,1byte = 8bit。对于bit中的第i位,该bit为1则表示true,即数据存在:为0则表示false,即数据不存在。其具体实现分为数据结构的定义、查询方法和修改方法的实现

1. 数据结构的定义

        在如下代码中定义了一个名为Bitmap的类用于位图数据结构的存储,其中byte[]数组用于存储具体的数据,length用于记录数据的长度:

//以bit为存储单位的数据结构,对于给定的第i位,1表示true,0表示false
public class Bitmap{
private byte[] bytes;
//length为位图的长度,实际可操作的下标为[0,length)
private int length;
public Bitmap(int length){
this.length = length;
bytes = new byte[length%8==0 ? length/8 : length/8+1];
}
}

2. 查询方法的实现

        位图的查询操作为在拿到目标bit所在的Byte后,将其向右位移(并将高位置0),是目标bit在第一位,这样结果值就是目标bit值,方法如下:



  1. 通过byte[index>>3](等价于byte[index/8])取到目标bit所在的Byte

  2. 令 i = index&7(等价于index%8),使得目标bit在该Byte中的位置

  3. 为了将目标bit前面的高位置0(这样位移后的值才等于目标bit本身),需要构建到目标bit为止的低位掩码,即01111111>>>(7-i),再与原Byte做&运算

  4. 将结果向右位移i位,使目标bit位处于第1位,结果值即为所求

//获取指定位的值
public boolean get(int index){
int i = index & 7;
//构建到index结束的低位掩码并做&运算(为了将高位置0),然后将结果一直右移,
//直到目标位(index位)移到第一位,然后根据其值返回结果
if((bytes[index >> 3] & (01111111 >>> (7-i))) >> i == 0)
return false;
else
return true;
}

3. 修改方法的实现

        对位图的修改操作根据设定值true或false的不同,分为两种情况



  1. 如果value为true,则表示数据存在,将目标位与1做或运算,需要构建目标位为1、其他位为0的操作数

  2. 如果value为false&#xff0c;则表示数据不存在&#xff0c;将目标位与0做与运算&#xff0c;需要构建目标位为0、其他位为1的操作数。构建目标位为1且其他位为0的操作数的做法为&#xff1a;1 <<(index & 7)

//设置指定位的值
public void set(int index, boolean value){
if(value)
//通过给定位index&#xff0c;先定位到对应的Byte&#xff0c;并根据value值进行不同位的操作&#xff1a;
//1.如果value为true&#xff0c;则目标位应该做或运算&#xff0c;构建“目标位为1&#xff0c;
//其他位为0”的操作数&#xff0c;为了只合理操作目标位&#xff0c;而不影响其他位
//2.如果value为false&#xff0c;则目标位应该做与运算&#xff0c;构建“目标位为0&#xff0c;
//其他位为1”的操作数
bytes[index >> 3 ] |&#061; 1 << (index & 7 );
//byte[index/8] &#061; byte[index/8] | (0b0001 <<(index%8))
else
bytes[index >> 3 ] &&#061; ~(1 << (index & 7 ));
}

本文地址:https://blog.csdn.net/weixin_44556968/article/details/110287626



推荐阅读
  • Android Bitmap 缓存策略
    Android中最常用到缓存的地方就是图片,通过过缓存即可以提高应用程序的效率,又可以节省用户的流量。图片的缓存简单来说可以分为SD卡缓存和内存缓存,也可以俩者配合使用。Andr ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • BitMap的原理和实现方法
    这篇文章主要介绍“BitMap的原理和实现方法”,在日常操作中,相信很多人在BitMap的原理和实现方法问题上存在疑惑,小编查阅了各式资料,整理出简 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 要点:假如有10亿元素,全部数据读进内存,占用1000000000*4102410241024≈3.725G,爆炸!解决方法:bitmap算法,每一位都能 ... [详细]
  • 从具有确切位置的两个imageView创建位图 - Create bitmap from two imageView with exact location
    MyTarget:Getonephotofromcameraorgallery,thensetittoimageViewA从相机或图库中获取一张照片,然后将其设置 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 白话计算机图形学初步-由一个小问题引发的故事
    一、为何写本文  今天在学习android时遇到的一个问题:android程序从网络得到一张图片,显示在程序的imageview中,期间调用了bitmap把字节数组转化成位图文件,才能 ... [详细]
author-avatar
手机用户2502931303
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有