| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2327 人关注过本帖
标题:【图】写了个程序,生成BMP图片……
只看楼主 加入收藏
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
结帖率:91.43%
收藏
已结贴  问题点数:20 回复次数:4 
【图】写了个程序,生成BMP图片……
=================================================================
貌似有人发过,但是这个是我自己写的,感谢美琴同学帮忙修改错误

由于论坛不允许上传BMP文件,此程序生成的BMP文件已经被我转成JPEG了
=================================================================


程序代码:
#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;
#define SIZE 40

#pragma pack(push)
#pragma pack(1)

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

/*定义信息头*/
typedef struct
{
    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
{
    BYTE blue;
    BYTE green;
    BYTE red;
} RGB_QUAD;

#pragma pack(pop)

int odd_or_even(int x)
{
    if((x%2) != 0)
    {
        return 1;
    }
    else
    {
        return -1;
    }
}

int main()
{
    RGB_QUAD *bmp_data = NULL;
    FILE *bmp_file;
    int i, j, k, q;
    long width = 400;  //设置图片宽度
    long height = 400; //设置图片高度
    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_QUAD*)malloc(width * height * 3)) == NULL)
    {
        printf("申请内存失败!\n");
        exit(0);
    }

    /*构建RGB信息,i为竖方向,j为横方向*/
    for(i = 0; i < width; i++)
    {
        for(j = 0; j < height; j++)
        {
            k = odd_or_even(i / SIZE);
            q = odd_or_even(j / SIZE);
            if(0 > (k * q))
            {
                bmp_data[i*width+j].blue = 255;
                bmp_data[i*width+j].green = 255;
                bmp_data[i*width+j].red = 255;
            }
            else
            {
                bmp_data[i*width+j].blue = 100;
                bmp_data[i*width+j].green = 100;
                bmp_data[i*width+j].red = 100;
            }

        }
    }
    fwrite(bmp_data, sizeof(RGB_QUAD), date_size, bmp_file);

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

图片附件: 游客没有浏览图片的权限,请 登录注册
收到的鲜花
  • 观弈寒儒2011-04-16 00:16 送鲜花  10朵   附言:加分最实在!
搜索更多相关主题的帖子: 图片 include 
2011-04-14 10:15
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:0 
如果你发现1楼生成的图片是绿色的格子,请去医院检查下你的色觉……

此程序的v1.0

https://bbs.bccn.net/thread-336164-1-1.html

此程序有一个BUG,就是只能用来生成正方形的图片,一旦设置的width !=height的时候,程序会出问题

所以求大大给力。

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

o(∩∩)Linux & Python 群:187367181
2011-04-14 10:17
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:7 
我帮你改改吧

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-04-14 10:29
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:7 
以下是引用thlgood在2011-4-14 10:17:16的发言:

如果你发现1楼生成的图片是绿色的格子,请去医院检查下你的色觉……
 
此程序的v1.0
 
https://bbs.bccn.net/thread-336164-1-1.html
 
此程序有一个BUG,就是只能用来生成正方形的图片,一旦设置的width !=height的时候,程序会出问题
 
所以求大大给力。
你自己也看出来了? 上次提醒你下了, 不过又被我编辑了,
跟高度没关系, 只要 宽度不是 2^n,你的程序就会出错...

我就是真命天子,顺我者生,逆我者死!
2011-04-14 10:32
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:7 
我一直觉得你行的

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-04-15 22:59
快速回复:【图】写了个程序,生成BMP图片……
数据加载中...
 
   



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

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