如何用C语言来显示一张24位真色彩的BMP图片

本人刚学完谭浩强老师的C语言基础第四版的书,现在菜鸟一只,但这个居然是寒假作业。。。。。。。百度出来的结果看不很懂,麻烦哪位好心人尽量通俗一点的帮我解答一下。。。拜托了。。。

第1个回答  2015-02-23

可以去看windows窗口编程

第2个回答  推荐于2016-08-29
源代码:
#include <windows.h>
#include <stdio.h>

#define BMP_SIZE_OFFSET 18
#define BMP_DATA_OFFSET 54

int main(void)
{

//定义操作位图的变量
int w; //图像宽度
int h; //图像高度
char *buf, *p; //图像数据
int r,g,b,pix; //像素颜色
int x,y,x0,y0; //平面坐标
FILE *fp; //文件指针
int i,j;

//定义窗口和绘图设备的变量
HWND wnd; //窗口句柄
HDC dc; //绘图设备环境句柄

if((fp=fopen("b_0.bmp","rb"))==NULL){
printf("文件未找到\n");
return-1;
}
fseek(fp,18L,SEEK_SET);
fread(&w,4,1,fp); //取图像宽度
fread(&h,4,1,fp); //取图像高度
buf=(char *)malloc(w*h*3);
fseek(fp,54L,SEEK_SET); //定位到数据处
fread(buf,1,w*h*3,fp); //读取像素数据
fclose(fp);

wnd=GetForegroundWindow(); //获取窗口句柄
dc=GetDC(wnd); //获取绘图设备

x0=40; y0=40;
p=buf;
for(j=0;j<h;j++){
for(i=0;i<w;i++){
b=*p++; g=*p++; r=*p++;
pix=RGB(r,g,b); //合成像素颜色值
//pix=(r&0xFF)<<16|(g&0xFF)<<8|b&0xFF; //与上一句邓加
SetPixel(dc,x0+i, y0+h-j, pix); //画像素点
}
}
free(buf);
getchar();
return 0;
}
经过测试此程序可以在vc6下正常运行;本回答被提问者和网友采纳
第3个回答  2015-02-23
老师是让你们在dos下面么?
相似回答