⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 color.cpp

📁 清华大学出版社出版的《数字图像处理实训教程》一书以提高动手能力为目标
💻 CPP
字号:
#include <stdio.h>
#include <windows.h>
void main() //void 也可以不要, 想想为什么
{
FILE *fp=fopen("e:\\mybook\\lena.raw","rb"); //打开文件lena.raw
if(fp==NULL)
{
printf("can not open lena.raw\n");
return;
}
unsigned char *image[1000];//image[i]是一个指针
for(int i=0;i<512;i++)
{
image[i]=new unsigned char[512]; //申请512字节的内存空间, 把起始地址赋给//image[i];
fread(image[i],1,512, fp);
}
fclose(fp);
//可以考虑在此处加入图像处理函数
FILE *fp1=fopen("e:\\mybook\\new.bmp","wb");
if(fp1==NULL){
printf("can not open new.bmp");
return;
}
int imageW=512;
int imageH=512;
int storeW=imageW;
if (storeW%4!=0) storeW+=(4-storeW%4);
BITMAPFILEHEADER bh;
bh.bfType = ((WORD) ('M' << 8) | 'B');  // "BM"
bh.bfReserved1=0;
bh.bfReserved2=0;
bh.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256+storeW*imageH;//注意此处用storeW; 
bh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256;
BITMAPINFOHEADER bInfo;
bInfo.biSize=sizeof(BITMAPINFOHEADER); 
bInfo.biWidth=imageW; 
bInfo.biHeight=imageH; 
bInfo.biPlanes=1; 
bInfo.biBitCount=8; 
bInfo.biCompression=BI_RGB; 
bInfo.biSizeImage=storeW*imageH; 
bInfo.biXPelsPerMeter=0; //0是一种简化问题的处理方法
bInfo.biYPelsPerMeter=0; 
bInfo.biClrUsed=256; 
bInfo.biClrImportant=0;
fwrite(&bh,sizeof(BITMAPFILEHEADER),1,fp1);
fwrite(&bInfo,sizeof(BITMAPINFOHEADER),1,fp1);
RGBQUAD rgb;
rgb.rgbReserved=0;
int r1=60,r2=200;
double k=1.5;
for(i=0;i<256;i++)
{
int ii=i;
if(ii<r1) ii=BYTE(i/k);
else if(ii<r2) ii= BYTE((ii-r1)*k+r1/k);
else ii=BYTE((ii-r2)/k+255-(255-r2)/k);
rgb.rgbBlue=rgb.rgbRed=rgb.rgbGreen=ii;
fwrite(&rgb,sizeof(RGBQUAD),1,fp1); 
}


for(i=0;i<512;i++)
{
fwrite(image[511-i],1,512, fp1);
}
fclose(fp1);//只有执行完fclose(fp1), 操作系统才会把所有数据写入new.raw, 否则, 有可能还在缓存中
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -