#include#includetypedefstructtagPoint{intx;inty;
}Point;
typedefstructtagRGB{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
}RGB;/**************************************************************
功能:在24位位图上通过传入的参数画一个矩形
参数: pfin 要绘制的位图
savePath 保存路径
LUpoint 矩形左上顶点
RDpoint 矩形右下顶点
colour 线框的颜色
作者:airduce
时间:2018-9-27 15:48:27
修改时间:无
修改内容:新建
**************************************************************/
int drawRectangle(FILE * pfin,char *savePath,Point LUpoint,Point RDpoint,RGB colour){
BITMAPFILEHEADER fileHeader;
BITMAPINFOHEADER infoHeader;//读取文件头
fread(&fileHeader,sizeof(BITMAPFILEHEADER),1,pfin);//读取信息头
fread(&infoHeader,sizeof(BITMAPINFOHEADER),1,pfin);if(infoHeader.biBitCount==24)
{//int size=infoHeader.biWidth*infoHeader.biHeight;//RGBQUAD img[256][256];//创建动态数组
RGB **img;
img= (RGB**)malloc(sizeof(RGB*)*infoHeader.biHeight);//创建一个指针数组,把指针数组的地址赋值给
for (int i = 0; i < infoHeader.biHeight; i++)
img[i]= (RGB*)malloc(sizeof(RGB)*infoHeader.biWidth);//给第二维分配空间//读取位图信息
for(int i = 0; i
fread(img[i],sizeof(RGB)*infoHeader.biWidth,1,pfin);
}//fread(img,sizeof(RGBQUAD),size,pfin);//上横线
for(int i=0;iLUpoint.x||i==LUpoint.x)&&(i
img[RDpoint.y][i].rgbBlue=colour.rgbBlue;
img[RDpoint.y][i].rgbGreen=colour.rgbGreen;
img[RDpoint.y][i].rgbRed=colour.rgbRed;//img[100][i].rgbReserved=0;
}
}//下横线
for(int i=0;i
{if((i>LUpoint.x||i==LUpoint.x)&&(i
img[LUpoint.y][i].rgbBlue=colour.rgbBlue;
img[LUpoint.y][i].rgbGreen=colour.rgbGreen;
img[LUpoint.y][i].rgbRed=colour.rgbRed;//img[100][i].rgbReserved=0;
}
}//左横线
for(int i=0;i
{if(i>LUpoint.y&&i
img[i][LUpoint.x].rgbBlue=colour.rgbBlue;
img[i][LUpoint.x].rgbGreen=colour.rgbGreen;
img[i][LUpoint.x].rgbRed=colour.rgbRed;//img[150][i].rgbReserved=0;
}
}//右横线
for(int i=0;i
{if(i>LUpoint.y&&i
img[i][RDpoint.x].rgbBlue=colour.rgbBlue;
img[i][RDpoint.x].rgbGreen=colour.rgbGreen;
img[i][RDpoint.x].rgbRed=colour.rgbRed;//img[150][i].rgbReserved=0;
}
}//将修改后的图片保存到文件
FILE * pfout = fopen(savePath,"wb");
fwrite(&fileHeader,sizeof(fileHeader),1,pfout);
fwrite(&infoHeader,sizeof(infoHeader),1,pfout);//fwrite(img,sizeof(RGBQUAD),size,pfout);
for(int i = 0; i
fwrite(img[i],sizeof(RGB)*infoHeader.biWidth,1,pfout);
}//释放空间
for(int i = 0; i
}free(img);
fclose(pfin);
fclose(pfout);return 0;
}
}int main(void){
errno_t err;
FILE*pfin;
err=fopen_s(&pfin ,"F:\\pic940.bmp","rb");if( err!=0)
{
printf_s("cannot open this file");return 0;
}char * myPath = "F:\\haha.bmp";
Point pPoint1,pPoint2;
pPoint1.x= 20;
pPoint1.y= 20;
pPoint2.x= 180;
pPoint2.y= 200;//RGBQUAD colour;
RGB colour;
colour.rgbRed=255;
colour.rgbGreen=0;
colour.rgbBlue=255;//colour.rgbReserved=0;
drawRectangle(pfin,myPath,pPoint1,pPoint2,colour);return 0;
}