| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3212 人关注过本帖
标题:为何该程序生成的BMP图像打不开??
取消只看楼主 加入收藏
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
结帖率:91.43%
收藏
已结贴  问题点数:20 回复次数:4 
为何该程序生成的BMP图像打不开??
程序代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#include <pshpack2.h>
#include <poppack.h>

typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;


/*定义位图文件头*/
typedef struct tag_BIT_MAP_FILE_HEADER
{
    WORD bfType;
    DWORD bfSize;
    WORD bfReserved1;
    WORD bfReserved2;
    DWORD bfOffBits;
} BIT_MAP_FILE_HEADER;

/*定义信息头*/
typedef struct tagBIT_MAP_INFO_HEADER
{
    DWORD biSize;
    DWORD biWidth;
    DWORD biHeight;
    WORD biPlanes;
    WORD biBitCount;
    DWORD biCompression;
    DWORD biSizeImage;
    DWORD biXPelsPerMeter;
    DWORD biYPelsPerMeter;
    DWORD biClrUsed;
    DWORD biClrImportant;
} BIT_MAP_INFO_HEADER;

/*调色板*/
typedef struct tagRGB
{
    BYTE blue;
    BYTE green;
    BYTE red;
} RGB;



int main()
{
    RGB *bmp_data = NULL;
    FILE *bmp_file;
    long i;
    long width = 80;
    long height = 80;
    long date_size = width*height;
    BIT_MAP_FILE_HEADER bmp_map_file;
    BIT_MAP_INFO_HEADER bmp_map_info;

    if((bmp_file=fopen("cubs.bmp", "wb+")) == NULL)
    {
        printf("Error!\n");
        system("pause");
        exit(0);
    }
    /*写入图位文件头*/
    bmp_map_file.bfType = 0x4d42;
    bmp_map_file.bfSize = 14 + 40 + width * height * 3;
    bmp_map_file.bfReserved1 = 0;
    bmp_map_file.bfReserved2 = 0;
    bmp_map_file.bfOffBits = 0x36;
    fwrite(&bmp_map_file, sizeof(BIT_MAP_FILE_HEADER), 1, bmp_file);

    /*写入信息头*/
    bmp_map_info.biSize = 40;
    bmp_map_info.biPlanes = 1;
    bmp_map_info.biHeight = height;
    bmp_map_info.biWidth = width;
    bmp_map_info.biBitCount = 24;
    bmp_map_info.biClrImportant = 0;
    bmp_map_info.biClrUsed = 0;
    bmp_map_info.biSizeImage = width*height*3;
    bmp_map_info.biCompression = 0;
    bmp_map_info.biXPelsPerMeter = 0;
    bmp_map_info.biYPelsPerMeter = 0;
    fwrite(&bmp_map_info, sizeof(BIT_MAP_INFO_HEADER), 1, bmp_file);

    /*给图像分配内存*/
    if((bmp_data=(RGB*)malloc(width * height * 3)) == NULL)
    {
        printf("申请内存失败!\n");
        exit(0);
    }
    /*RGB赋值并写入文件中*/
    for(i= 0; i<width*height; i++)
    {
        bmp_data[i].green=255;
        bmp_data[i].red=0;
        bmp_data[i].blue=0;
    }
    fwrite(bmp_data, sizeof(RGB), date_size, bmp_file);

    printf("BMP图像生成成功!\n\n\n");
    fclose(bmp_file);
    free(bmp_data);
    bmp_data = NULL;
    return 0;
}

搜索更多相关主题的帖子: 图像 
2011-04-10 12:47
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:0 
关于BMP文件格式,请参考:http://

如果文件头和信息头要是没有出错,就尽量别修改,因为这个程序生成的图像本来是彩色的,贴到这里的时候我简化了一下

[ 本帖最后由 thlgood 于 2011-4-10 12:54 编辑 ]

o(∩∩)Linux & Python 群:187367181
2011-04-10 12:50
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:0 
木有人帮我??

o(∩∩)Linux & Python 群:187367181
2011-04-10 14:00
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:0 
美琴帮我改程序,我感到万分荣幸!
这次真的成功了,我想问一下,我那个程序问题出在哪里?

o(∩∩)Linux & Python 群:187367181
2011-04-10 15:08
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:0 
回复 7楼 御坂美琴
额~原来是这样啊,我来好好研究研究!!谢谢啊

o(∩∩)Linux & Python 群:187367181
2011-04-10 15:29
快速回复:为何该程序生成的BMP图像打不开??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027372 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved