当前位置:C++技术网 > 资讯 > bitmap怎么转byte数组

bitmap怎么转byte数组

更新时间:2016-08-23 22:36:12浏览次数:1+次

我D盘有一张bmp的图片,怎么样才能把这张图片转成一个byte数组呢?{12,34,222,.....}这样的数组

C++技术网解答:

    bmp图片文件是二进制数据,你将图片文件以二进制的格式打开,然后读取数据,就是二进制的文件数据。然后一次性将图片文件数据读入到缓存中。这个缓存就是你的byte数组。

    你最好是在打开文件后,获取文件的大小,然后根据获取的大小,动态创建一个字节数组。因为你事先并不知道图片文件数据到底有多大,无法事先定义一个固定大小的字节数组。而且,定义的自动数组有大小限制,自动数组使用的是栈来存储的。而默认的栈大小一般是1MB。如果你的图片大小超出了,也就溢出了数组。

    解释一下,自动数组就是下面这样定义的:

byte buf[100];
     这个就是我们最常见的定义数组的方法。就是怕没听说“自动数组”或者我叫的不对,所以注释一下。而使用malloc()函数或者new分配的内存则是在堆中创建的,所以一般不会有大小限制,除了物理内存大小的限制。

    根据文件大小创建一个动态数组,也就是用malloc()或者new创建的字节数组,然后将文件数据读进这个字节数组。一般图片不会很大,就一次性读取进来就行了。读取进来后,关闭文件即可。

    这样,byte数组就装载了图片文件的数据了。

    至于打开文件、获取文件大小、读取文件数据和关闭文件,有很多种实现方法,如C语言实现、C++的文件流、MFC的Cfile类,或者系统提供的文件操作API函数。也就是几个函数而已。要使用哪一种,就看你熟悉哪一种了,都是一样的。MFC的以及C/C++语言的文件操作,最终都会调用到系统的文件操作API函数,你也可以直接使用操作系统提供的文件操作API函数。

    那么具体代码就不说了。给了思路,剩下的就只差几个函数的调用了,留给你自己完成吧。