c语言画矩形,c语言调用这个方法在24位bmp位图上画一个矩形(动态二维数组)

#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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值