增加一套缓冲区,在位图上画彩条和灰阶

在昨天写的程序的基础上增加了一套缓冲区scr_R、scr_G、scr_B作为画布,画图前先在缓冲区里操作,然后再输出到文件,从而增加了灵活度和可画图形的复杂性。

难点在于内存的分配、释放,以及缓冲区指针的寻址。目前,程序对于下标越界没有做任何处理。

绘图函数有:dot、box、gray_bar、color_bar,其中dot是最基本的画点函数,因为box也是由一个一个的dot组成的。

gray_bar和color_bar是利用box函数完成的。

因为现在的机器很快,所以即使嵌套调用也没问题。

如果将三个颜色的缓冲区合并起来,可以通过单条fwrite语句直接写入文件,但是这样内存里保存图像的数据格式必须与输出的格式完全一致。如果定死了输出格式,那么问题不大。如果输出的图像是用来喂视频编码器的,那么可能就要定死格式,以进行优化。

代码如下。程序在C-Free 4.0,mingw2.95编译器下编译通过。

#include <stdio.h>
#include <stdlib.h>

typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;

#pragma pack(2) 

#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
#define s8 int8_t
#define s16 int16_t
#define s32 int32_t

struct BM_Header
{
	u8  bfType[2];
	u3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值