文档章节

Bitmap 位图文件 编码/解码 --C语言实现

t
 tigerBin
发布于 2017/07/01 19:58
字数 340
阅读 353
收藏 0

Source Code :  https://git.oschina.net/SilentCode/BitmapCoDecoders

仅以 24为真彩色Window Bitmap 文件格式为参考,不支持 OS/2格式的位图文件

大部分24位图文件包含54个字节的文件头信息,且大部分字段相同,不同的地方只有 三个字段共12个字节

offset 从文件头开始的偏移量,hex(十六进制), dec(十进制)

Offset hex Offset dec Size(字段长度) Purpose(用途)
0x02 2 4 bytes 文件的总字节数
0x12 18 4 bytes 图像的宽度(Width)
0x16 22 4 bytes 图像的高度(Height)

 

Bitmap文件采用小端字节序的方式存储头部信息,也就是说,如果读取到的宽度是 00 00 01 00 四个连续的字节,那么实际的宽带是 00 01 00 00 = 0x00010000

数据部分按照从左到右,从下到上的顺序排列,详情请参考:

 https://my.oschina.net/tigerBin/blog/919744

https://en.wikipedia.org/wiki/BMP_file_format

 

BmpDecoder.h 位图文件解码部分

直接调用OpenImage打开文件,读取位图数据,返回结果是按照 BGR的顺序存放的

 

BmpEncoder.h 文图文件编码部分

直接调用Encoder将 BGR顺序的位图数据编码为Bitmap格式的数据流

调用Write函数保存文件数据

 

main.cpp 运行示例

g++ main.cpp -o main
main demo.bmp out.bmp

demo.bmp

out.bmp

© 著作权归作者所有

t
粉丝 1
博文 68
码字总数 21802
作品 0
武汉
程序员
私信 提问
加载中

评论(0)

Bitmap之位图采样和内存计算详解

原文首发于微信公众号:躬行之(jzman-blog) Android 开发中经常考虑的一个问题就是 OOM(Out Of Memory),也就是内存溢出,一方面大量加载图片时有可能出现 OOM, 通过采样压缩图片可避免 OO...

躬行之
04/09
0
0
Android图形处理之Bitmap

Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。本文从应用的角度,着重介绍怎么用Bitmap来实现...

等待流星
2014/11/17
912
0
Android-Bitmap详解

Android技术精髓-Bitmap详解 Bitmap (android.graphics.Bitmap) 使用BitmapFactory解码资源 import android.graphics.BitmapFactory;import android.graphics.drawable.Drawable;import and......

张腾元-Ternence
2014/02/05
0
0
【0193】Android 性能优化之Bitmap内存管理及优化

1.Bitmap的加载 图片存在的几种形式:File、Stream、Bitmap内存的形式 常用的三个方法:最后都是调用的是decodeStream static Bitmap decodeFile(String pathName, BitmapFactory.Options op...

osc_3rorki68
2018/07/26
2
0
Android解决大图片内存溢出

在Android平台上内存溢出是一件很头疼的事情,但解决办法还是有的,今天来翻译一篇谷歌官方提供的解决方案,原文可以参见:http://developer.android.com/training/displaying-bitmaps/load-bi...

hhs
2012/08/28
3.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

一言难尽,Jpa这个功能差点让我丢了工作

故事背景 前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸。 故事细节 在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了,相...

osc_axe50nd6
8分钟前
6
0
Link Cut Tree

//知识点 : LCT /*By:Luckyblock*/#include <cstdio>#include <ctype.h>#include <algorithm>#define ls (t[x].son[0])#define rs (t[x].son[1])const int kMaxn = 1e5 + 10;//===......

osc_q5urtsdm
9分钟前
19
0
【问题】Could not locate PropertySource and the fail fast property is set, failing

这是我遇到的问题 Could not locate PropertySource and the fail fast property is set, failing springcloud的其他服务读取不了配置中心得配置文件出错,原因是配置中心的一个配置文件有s...

osc_z9jr2tjo
11分钟前
5
0
Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(四)

在上一讲中,我们已经完成了一个完整的案例,在这个案例中,我们可以通过Angular单页面应用(SPA)进行登录,然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证。在本讲中,我们...

osc_doeya1ck
12分钟前
16
0
[推荐]大量 Blazor 学习资源(一)

前言 / Introduction Blazor 是什么? Blazor 允许您使用 C# 而不是 JavaScript 构建交互式 Web UI。 Blazor 应用由使用 C#、HTML 和 CSS 实现的可重用 Web UI 组件组成。客户端和服务器代码...

osc_3r4js8qy
13分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部