bmp图片数据提取

仿照别人的程序写的bmp数据提取C代码,并将提取的数据放到txt文档中

 1 /*
 2 date : 2014/06/24
 3 designer :pengxiaoen
 4 version : dev4.9.9.0
 5 function :读取bmp图片的图片数据信息到文件txt中。参考了其他的程序
 6
 7 bmp 文件格式: 第10个字节处存放图像数据起始地址 —— 此程序中25行用到
 8                第36h - 0436h 字节处存放调色板 —— 此程序中没有用到
 9
10 *****************************************************************************************
11 检测数据读取:第37行替换第35行,并且屏蔽掉42行-73行 bmp_data 修改成int
12 发现37行打印出来的数据为1a111111.使用存储格式看.bmp的时候发现对
13 应的位置数据为1111111a。
14
15 因为原始程序中使用的 bmp_data 是char 型,也就是读取数据的时候是一个像素点一个
16 像素点的读,所以就避免了倒序的情况发生
17 *******************************************************************************************
18 */
19 #include "stdio.h"
20 #include "FileDefine.h"
21
22  main()
23 {
24     unsigned char bmp_data [pic_size];
25     unsigned int  i , pic_data_add ;
26
27 //**********************************************************
28     FILE *fp0 = fopen(pic_file ,"rb");  //开启图片
29     if(fp0==NULL)
30         printf("open pic_file fault !!!! \n");
31     else
32     {
33         printf("open pic_file sucess! \n");
34
35         fseek(fp0,10L,0); // 找到图片数据存储位置地址
36         fread(&pic_data_add,4,1,fp0);
37         printf("\nbmp_data_begin is %.4x \n",pic_data_add );
38         rewind(fp0);
39         fseek(fp0,pic_data_add,0);  // 指针指向图片数据存储位置
40         fread(bmp_data,pic_size,1,fp0);   //将数据读取到数组中
41
42         //fread(bmp_data,4,1,fp0);  printf("%x",bmp_data[0]) ;
43
44
45         fclose(fp0);
46     }
47 //**********************************************************
48     FILE *fp1 = fopen(pic_data ,"w"); // 打开文件为存储图片数据做准备
49     if(fp1==NULL)
50         printf  ("txt data file open fault !!!!!");
51     else
52     {
53         printf ("\ntxt data file open sucess !\n\n");
54
55         for (i=0;i<pic_size;i++)
56         {
57             fprintf (fp1,"%.2x\n",bmp_data[i]); // 将数组中的数据放到txt文档中
58         }
59         fclose(fp1);
60     }
61
62 //***************为了验证Verilog中读取的数据是否正确而额外加的代码***********************
63     FILE *fp2 = fopen("checkPic_data.txt" ,"w"); // 打开文件为存储图片数据做准备
64     if(fp2==NULL)
65         printf  ("checkPic_data.txt data file open fault !!!!!");
66     else
67     {
68         printf ("\ncheckPic_data.txt data file open sucess !\n\n");
69
70         for (i=0;i<pic_size;i++)
71         {
72             if(!(i%1024)) fprintf (fp2,"\n\n\n%.2x",bmp_data[i]);
73             else if(!(i%8)) fprintf (fp2,"\n%.2x",bmp_data[i]);
74             else fprintf (fp2,"%.2x",bmp_data[i]); // 将数组中的数据放到checkPic_data文档中
75         }
76         fclose(fp2);
77     }
78
79     system ("pause");
80 }   
 1 #define pic_file  "flower.bmp"
 2 #define pic_data  "pic_data.txt"
 3 #define bmp_file_rslt "sobel_rslt1.bmp"
 4
 5 #define original_pic_height  768
 6 #define original_pic_width   1024
 7
 8
 9
10
11
12 #ifdef original_pic_width%4=0
13     #define pic_width   original_pic_width
14 #else
15     #define pic_width   (original_pic_width + 4 - original_pic_width%4 )
16 #endif
17
18 #define pic_size  (pic_width * original_pic_height) 

bmp图片数据提取

时间: 2024-10-08 22:17:32

bmp图片数据提取的相关文章

读取bmp图片数据

1 public void getBMPImage(String source) throws Exception { 2 3 clearNData(); //清除数据保存区 4 FileInputStream fs = null; 5 6 try { 7 fs = new FileInputStream(source); 8 int bfLen = 14; 9 byte bf[] = new byte[bfLen]; 10 fs.read(bf, 0, bfLen); // 读取14字节BMP

【C】用C语言提取bmp图片像素,并进行K-means聚类分析——容易遇到的问题

关于bmp图片的格式,网上有很多文章,具体可以参考百度百科,也有例子程序.这里只提要注意的问题. (1)结构体定义问题:首先按照百度百科介绍的定义了结构体,但是编译发现重定义BITMAPFILEHEADER等.其实只要包含了Windows.h,里面的wingdi.h就已经定义了处理bmp的结构体,故不需要自己再重复定义. (2)读取文件的字节对其问题:要使用#pragma pack (1)来方便读取文件头的结构体,否则结构体的大小会由于字节对齐问题改变.不知是否头文件中已经使用了该宏,在我的代码

提取bmp图片的颜色信息,可直接framebuffer显示

稍微了解了下linux的framebuffer,这是一种很简单的显示接口,直接写入像素信息即可 配置好的内核,会有/dev/fbn 的接口,于是想能否提前生成一个文件,比如logo.fb,里面仅包含像素信息,从而可以直接送入framebuffer显示 搜索了一下,有不少文章介绍,如何解析bmp图片并送给framebuffer显示,但没有找到预处理工具,都是直接处理完就送入framebuffer 于是参考了一篇文章,改动了下代码,将直接送入framebuffer变成写到一个文件中. 原代码地址为

Linux framebuffer显示bmp图片

framebuffer简介     帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作.framebuffer是LCD对应的一中HAL(硬件抽象层),提供抽象的,统一的接口操作,用户不必关心硬件层是怎么实施的.这些都是由Framebuffer设备驱动来完成的.     帧缓冲设备对应的设备文件为/dev/fb*,如果系统有多个显示卡,Linux下还可支持多个帧缓冲设备,最多可达32个,分别为/d

【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片

本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp图像文件的类型.文件大小等信息. (2)位图信息数据结构,包含Bmp图像的宽.高.压缩类型等信息. (3)颜色表,该部分可选,有些位图需要,有些位图(如24位真彩色位图)不需要. (4)位图数据. 1.1位图头文件数据结构 位图头文件数据结构包含Bmp图像文件的类型.文件大小等信息,占用14个字节.

opengl打开本地bmp图片绘制

注意bmp图片的格式问题,32位ARGB  或者24位RGB.你所采用的素材一定要注意是多少位的就用多少位的.否则会显示错误的图片或者其他什么的错误. 代码如下 32位版本 #include <GL/glut.h> static GLint ImageWidth; static GLint ImageHeight; static GLint PixelLength; static GLubyte* PixelData; #include <stdio.h> #include <

C++读取BMP位图数据的方法

图片文件是有固定格式的,像BMP图片:文件头+位图的颜色数据. 文件头一般在读取的时候是使用下面的代码: BITMAPFILEHEADER fileheader={0}; fread(&fileheader,sizeof(fileheader),1,fp); if(fileheader.bfType!=0x4D42) // 判断是否为BMP图片 { fclose(fp); return ; } BITMAPINFOHEADER head; fread(&head,sizeof(BITMAP

日式冒险游戏《巫女小镜大冒险》PIC 图片转 BMP 图片

----------------------------------------------------------------------------- !!警告!! 游戏资源所有权,归游戏开发商所有 以下转换算法与代码,仅供学习交流使用,请勿用于非法或商业用途 由此引起的一切后果,与博主(我)无关 ----------------------------------------------------------------------------- 这游戏的资源本身没有被打包,直接就可以看

DICOM医学图像处理:DICOM存储操作之“多幅BMP图像数据存入DCM文件”

背景: 本专栏"DICOM医学图像处理"受众较窄,起初只想作为自己学习积累和工作经验的简单整理.前几天无聊浏览了一下,发现阅读量两极化严重,主要集中在"关于BMP(JPG)与DCM格式转换"和"DICOM 通讯协议",尤其是许久前的第一篇博文DCMTK开源库的学习笔记1:将DCM文件保存成BMP文件或数据流(即数组).因此在2014年底前打算写几篇关于DCM格式转换的文章,此次主要聚焦"如何将BMP.JPG等常规图像保存成DCM文件&q