零基础之位图(理解计算机图像用)

有了一些C++基础之后,就不免思考到,既然所有的东西在计算机的内存里面都是二进制保存的,那么我们电脑上显示的画面也应该有相应的设计保存方式,找了些资料贴下来供自己以后温习。看完过后不免对颜色有了更深的理解,三原色 加个深度饱和度啥的。。。其实也蛮简单的嘛。



//位图文件头结构体

struct BITMAPFILEHEADER 
{
WORD bfType;  //文件类型,位图为'MB'
DWORD bfSize; //整个位图文件的大小
WORD bfReserved1;//
WORD bfReserved2;//
DWORD bfOffBits; //从文件头到颜色首地址的偏移值
};


//位图信息头结构体
struct BITMAPINFOHEADER 
{
DWORD biSize;   //本结构体的大小
LONG biWidth;  //图片的像素宽
LONG biHeight;  //图片的像素高
WORD biPlanes;   
WORD biBitCount  //颜色的色深(一个像素点的颜色用多少位来保存)
DWORD biCompression; 
DWORD biSizeImage;  
LONG biXPelsPerMeter;  
LONG biYPelsPerMeter; 
DWORD biClrUsed;  
DWORD biClrImportant; 
};
//颜色存储是从左下角开始,从左到右,从下往上存储的。
//为了加快访问速度,一行像素的存储大小必须是4的整数倍


struct RGB
{
char b;
char g;
char r;
};


void main()
{
FILE* fp;
fopen_s(&fp, "1.bmp","rb");
if (fp == 0)
return;


fseek(fp, 0, SEEK_END);
int size = ftell(fp);
fseek(fp, 0, SEEK_SET);
BITMAPFILEHEADER* p = (BITMAPFILEHEADER*)malloc(size);
fread(p, size, 1, fp);
fclose(fp);


std::cout<< ((char*)&(p->bfType))[0] <<std::endl;
std::cout<< ((char*)&(p->bfType))[1]<<std::endl;
std::cout<< p->bfSize <<std::endl;
std::cout<< p->bfOffBits <<std::endl;


BITMAPINFOHEADER* info = (BITMAPINFOHEADER*)(p+1);
std::cout<< info->biWidth<<std::endl;
std::cout<< info->biHeight<<std::endl;

RGB* color = (RGB*)((char*)p + p->bfOffBits);
int x = 3;
int y = 8;
RGB* c = (RGB*)((char*)color + (info->biHeight-1-y)*(3*info->biWidth) + x*3);
c->r = 255;
c->g = 255;
c->b = 123;




//[] <---  p
//[]
//[] BITMAPFILEHEADER head;
//[]
//[]   


//[]      
//[] BITMAPINFOHEADER info;
//[]
//[]
//[]
//[] RGB a;
//[]
//[]
//[]
//[] RGB a;
//[] RGB a;
//[]
//[]
//[]
//[] RGB a;
//[] RGB a;
//[]
//[]
//[]
//[] RGB a;
//[] RGB a;
//[]
//[]
//[]
//[] ABC a;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值