该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

bmp:

位深度储存在第29和第30个byte里面,不过其实第30个byte肯定是0,所以就看第29个——b[28]就行了。

int bitsPerPixel = (b[28] & 0xff) | (b[29] & 0xff) << 8;

gif:

位深度就在第11个byte里面,就一个,很好找。当然,这是第一张的,如果是该GIF文件是多张图片组成的动态图像,那么位深度则应该是单张位深度最高的那张的位深度。

int bitsPerPixel = (b[10] & 0x07) + 1;

jpg:

JPEG图像文件的高压缩储存方式注定了里面的规则比较复杂,都是一个标记跟着一个长度,

一个标记跟着一个长度。而要找位深度就要先找对标记,找对了标记再往下移几位就是了。

int i = 2;

while (true) {

int marker = (b[i] & 0xff) << 8 | (b[i + 1] & 0xff);

int size = (b[i + 2] & 0xff) << 8 | (b[i + 3] & 0xff);

if (marker >= 0xffc0 && marker <= 0xffcf && marker != 0xffc4 && marker != 0xffc8) {

int bitsPerPixel = (b[i + 4] & 0xff) * (b[i + 9] & 0xff);

break;

} else {

i += size + 2;

}

}

png:

这个就有点奇怪了,因为PNG图像是有4个通道——red、green、blue、alpha的,但是不是所有的PNG图像都有透明区域的,所以有些情况下并不是32位的。

我试过两种情况:1.使用Photoshop新建一张图片,这时候的唯一一张图层是背景图层,然后直接保存为PNG图像文件,而不要把它转换为普通图层,然后你右键文件打开属性,会发现位深度是24位的;2.使用QQ截图,截取的图像直接保存为PNG图像文件,这样你也会发现是24位的。

但是如果你用mspaint(Microsoft Paint,Windows自带的画图软件)打开后,再保存,你会发现位深度变成了32位(当然文件大小也变大了)。

我从代码里得到的方法是这样的

如果第26个byte的数值是2或者6,那么位深度是3倍的第25个byte;若不是,则直接是第25个byte。但是我发现,这样得到的结果始终是24位,而非32位,所以我觉得有两种可能:1.也许这代码错了,作者找错位置了;2.该方法只能找到其中alpha通道除外的其他3个通道的位深度,而是否有alpha通道则要另外找信号确认。

int bitsPerPixel = (b[25] & 0xff) == 2 || (b[25] & 0xff) == 6 ? (b[24] & 0xff) * 3 : b[24] & 0xff;

java修改位深度_【分享】刚刚弄明白如何获取图像文件的位深度,适合任何语言。...相关推荐

  1. BigDecimal 往左移动两位小数_一课研究之“让问题意识成为学生深度学习的钥匙——除数是整数的小数除法例谈”20190830...

    1 向你介绍我是谁 大家好,我是温春梅,来自浙江嘉兴南湖国际实验学校,是朱乐平名师工作站第30组的成员,在一课研究的微信平台中,期待与您共同探寻一课研究之路. 2 本期内容有哪些 听一听:  什么是小 ...

  2. java修改配置文件参数_在java类中获取在.properties配置文件中设置的参数

    如何获取.properties配置文件中的参数,我在网上查了半天没弄明白,后来在以前的项目中找到了,就写下来,避免遗忘. 1.配置文件:message_product.properties total ...

  3. java万能编码转换_分享万能java字符串编码转换工具类

    package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public cla ...

  4. 查看队列深度_不为人知的网络编程(十一):从底层入手,深度分析TCP连接耗时的秘密...

    " 本文作者张彦飞,原题"聊聊TCP连接耗时的那些事儿",本次收录已征得作者同意,转载请联系作者.即时通讯网收录时有少许改动.本文已同步发布于52im社区:http:// ...

  5. java 修改字节码_使用JBE(Java Bytecode Editor)修改Java字节码

    JBE JBE(Java Bytecode Editor)是一个Java字节码编辑工具,而且是开源的,该项目是基于jclasslib ej-technologies(https://github.co ...

  6. 批量生成6位数字_分享一款可做各种流水号的条码生成软件

    对于刚接触条码生成软件的新用户,在条码生成软件中设计可变数据条码或者流水条码时,可能会有一点困难,如果一个一个的设计条码,不仅费时费力,还容易出错.特别是需要设计一些跳号的流水条码时,更是难上加难.其 ...

  7. java 修改源码_再谈给应用程序diy启动画面和java源代码补丁修改

    再谈给应用程序diy启动画面和java源代码补丁修改 2006-8-21 16:18 6365 再谈给应用程序diy启动画面和java源代码补丁修改 2006-8-21 16:18 6365 搞diy ...

  8. java 修改文件内容_用Java修改现有文件内容

    小编典典 如对类似问题的公认答案中所建议: 同时以写入模式打开一个临时文件,对于每一行,读取它,必要时进行修改,然后写入该临时文件.最后,删除原始文件并重命名临时文件. 根据您的实现,类似于以下内容: ...

  9. java脏话模糊对比_分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤...

    案例1. 利用Servlet的过滤器Filter进行完成脏话过滤 package cn.javabs.filter; import java.io.IOException; import javax. ...

最新文章

  1. CR--同事分享学习
  2. Matlab之if-else-end分枝语句
  3. 基于pygame的贪吃蛇游戏
  4. myeclipse中ALT+/怎么不管用了
  5. 测试SAP云平台上的Redis数据库服务
  6. 如何在SAP云平台上创建Redis实例
  7. java中几种常见字符集与乱码介绍
  8. 【吴恩达机器学习】学习笔记——4多元线性回归
  9. [源码解读]position_estimator_inav_main解读(如何启动光流)
  10. vv7无法启动显示发动机故障_启动系统故障引起的发动机无法启动诊断方法
  11. mysql注入扫描网站漏洞工具_SQL注入漏洞扫描工具
  12. Linux 父进程子进程的进程分析
  13. 智慧城市建设,目前所面临的技术瓶颈是什么?
  14. dw2019连接mysql数据库_VS 2019 连接MySQL数据库配置记录
  15. vue中实现电子签名
  16. 寻找你的热情(1)——检查自己所处的位置
  17. Android中播放本地SD卡中歌曲需要的添加的权限
  18. linux之下载工具那些事
  19. node之手写脚手架
  20. 实验三 密码破解技术

热门文章

  1. 2010年底世界各国GDP
  2. 每日三题 11.01
  3. LTC3780 工作原理分析
  4. 让ICT飞鸟,长出数字能源的翅膀
  5. 每日IN语(2009-01-12)喝醉了我谁也不服
  6. 做一款解压且好玩的微信小游戏
  7. pygame中文文档 四
  8. dell服务器双系统怎么切换,戴尔17rt4728双系统肿么切换?
  9. 如何正确使用激光雷达
  10. android apk 导出工具,APK批量导出工具