位图文件放缩算法[馋嘴][困][困]
#include
#include
#include
#include
#pragma pack(1)//防止编译器自动对齐
//定义bmp起始部分
typedef struct WTheader{//位图文件头(用于识别位图文件)
unsigned short bfType;//保存图片类型,标志该文件是位图文件
unsigned long bfSize;//位图文件的大小
unsigned short bfReserved1; //位图文件保留字,必须为0(7-8字节)
unsigned short bfReserved2;// 位图文件保留字,必须为0(9-10字节)
unsigned long bfoffbits;//RGB数据偏移地址,位图数据的起始位置
}WTheader;
typedef struct XXheader{//位图信息头(简化)
unsigned long biSize;//该结构的字节数
unsigned long biWidth;//以像素为单位的图像宽度
unsigned long biHeight;// 以像素为单位的图像长度
unsigned short biPlanes;//目标设备级别,必须为1
unsigned short biBitcount;//每个像素所需的位数,必须是1
unsigned long biSizeImage;//以字节为单位的图像数据的大小
unsigned long biXPelsPerMeter;//位图水平分辨率,每米像素数
unsigned long biYPelsPerMeter;//位图垂直分辨率,每米像素数
unsigned long biClrUsed;//位图实际使用的颜色表中的颜色数
unsigned long biClrlmportant;//位图显示过程中重要的颜色数
}XXheader;
//图片放大缩小函数
void F(WTheader x1,XXheader x2,double t,char *file_x,char *file_y)
{
FILE *X,*Y;//创建文件变量X,Y分别储存原始文件和目标文件的信息
X=fopen(file_x,"rb");//以只读的形式打开原始文件
Y=fopen(file_y,"wb");//以二进制形式进行读写的形式打开目标文件
if(X==NULL||Y==NULL){
printf("打开失败\n");
return ;
}//判断文件是否为空
fread(&x1,sizeof(WTheader),1,X);//用x1接收X中存储的原始文件的位图文件头
fread(&x2,sizeof(XXheader),1,X);//用x2接收X中存储的原始文件的位图信息头
unsigned int xw=x2.biWidth;
printf("原图片的宽:%d\n",xw);//读取原始图像宽度并打印
unsigned int xh=x2.biHeight;
printf("原图片的高:%d\n",xh);//读取原始图像高度并打印
unsigned char* x_pixels=(unsigned char*)malloc(xw*xh*3);//创建指针申请内存用于读入原始位图数据
fseek(X,54,SEEK_SET);//通过fseek函数进行定位,以读入所需的数据
fread(x_pixels,xw*xh*3,1,X);//将原始位图信息读入已申请的内存
unsigned int yw=(int)t*xw;
printf("新图片的宽:%d\n",(int)t*xw);//计算目标图像的图像宽度并打印
unsigned int yh=(int)t*xh;
printf("新图片的高:%d\n",(int)t*xh);//计算目标图像的图像高度并打印
x1.bfSize=yh*yw*3+54;//在x1中写入位图文件的大小
x2.biWidth=yw;//在x2中写入目标图像的图像宽度
x2.biHeight=yh;//在x2中写入目标图像的图像高度
fwrite(&x1,sizeof(WTheader),1,Y) ;// 把x1中数据写入Y
fread(&x2,sizeof(XXheader),1,Y);// 把x1中数据写入Y
int i=0,j=0;
unsigned long dwx,dwy;
unsigned char *puD;
unsigned char *puS;
unsigned char *y_pixels=(unsigned char *)malloc(yh*yw*3);
//通过for的双重循环循环拷贝字节数到目标文件
for(int i=0;i {
dwy=i*t;
puD=y_pixels+i*x2.biWidth*3;//完整的for循环存入的字节量
puS=x_pixels+dwy*x2.biWidth*3;//缩小/放大
for(int j=0;j {
//数据拷贝
dwx=j*t;
memcpy(puD+j*3,puS+ dwx*3,3);//复制字节到目标文件
}
}
fseek(Y,54,SEEK_SET);//通过fseek函数进行定位,以写入目标文件所需的数据
fwrite(y_pixels,yw*yh*3,1,Y);//写入目标文件所需的数据
printf("执行成功\n");
free(x_pixels);free(y_pixels);//释放内存
fclose(X);fclose(Y); //关闭打开的文件
}
//主程序
int main(int argc,char* argv[])
{
WTheader x1;XXheader x2;//创建结构体变量x1,x2分别储存位图文件头和位图信息头
double t=atof(argv[2])/100.0;//通过读取第二个行参数计算伸缩比例
memset(&x1,0,sizeof(WTheader));//把x1中置0
memset(&x2,0,sizeof(XXheader));//把x2中置0
printf("%f\n",t);//打印伸缩比例
F(x1,x2,t,argv[1],argv[3]);//通过读取第一个行参数和第三个行参数计算伸缩比例
return 0;
}
#include
#include
#include
#include
#pragma pack(1)//防止编译器自动对齐
//定义bmp起始部分
typedef struct WTheader{//位图文件头(用于识别位图文件)
unsigned short bfType;//保存图片类型,标志该文件是位图文件
unsigned long bfSize;//位图文件的大小
unsigned short bfReserved1; //位图文件保留字,必须为0(7-8字节)
unsigned short bfReserved2;// 位图文件保留字,必须为0(9-10字节)
unsigned long bfoffbits;//RGB数据偏移地址,位图数据的起始位置
}WTheader;
typedef struct XXheader{//位图信息头(简化)
unsigned long biSize;//该结构的字节数
unsigned long biWidth;//以像素为单位的图像宽度
unsigned long biHeight;// 以像素为单位的图像长度
unsigned short biPlanes;//目标设备级别,必须为1
unsigned short biBitcount;//每个像素所需的位数,必须是1
unsigned long biSizeImage;//以字节为单位的图像数据的大小
unsigned long biXPelsPerMeter;//位图水平分辨率,每米像素数
unsigned long biYPelsPerMeter;//位图垂直分辨率,每米像素数
unsigned long biClrUsed;//位图实际使用的颜色表中的颜色数
unsigned long biClrlmportant;//位图显示过程中重要的颜色数
}XXheader;
//图片放大缩小函数
void F(WTheader x1,XXheader x2,double t,char *file_x,char *file_y)
{
FILE *X,*Y;//创建文件变量X,Y分别储存原始文件和目标文件的信息
X=fopen(file_x,"rb");//以只读的形式打开原始文件
Y=fopen(file_y,"wb");//以二进制形式进行读写的形式打开目标文件
if(X==NULL||Y==NULL){
printf("打开失败\n");
return ;
}//判断文件是否为空
fread(&x1,sizeof(WTheader),1,X);//用x1接收X中存储的原始文件的位图文件头
fread(&x2,sizeof(XXheader),1,X);//用x2接收X中存储的原始文件的位图信息头
unsigned int xw=x2.biWidth;
printf("原图片的宽:%d\n",xw);//读取原始图像宽度并打印
unsigned int xh=x2.biHeight;
printf("原图片的高:%d\n",xh);//读取原始图像高度并打印
unsigned char* x_pixels=(unsigned char*)malloc(xw*xh*3);//创建指针申请内存用于读入原始位图数据
fseek(X,54,SEEK_SET);//通过fseek函数进行定位,以读入所需的数据
fread(x_pixels,xw*xh*3,1,X);//将原始位图信息读入已申请的内存
unsigned int yw=(int)t*xw;
printf("新图片的宽:%d\n",(int)t*xw);//计算目标图像的图像宽度并打印
unsigned int yh=(int)t*xh;
printf("新图片的高:%d\n",(int)t*xh);//计算目标图像的图像高度并打印
x1.bfSize=yh*yw*3+54;//在x1中写入位图文件的大小
x2.biWidth=yw;//在x2中写入目标图像的图像宽度
x2.biHeight=yh;//在x2中写入目标图像的图像高度
fwrite(&x1,sizeof(WTheader),1,Y) ;// 把x1中数据写入Y
fread(&x2,sizeof(XXheader),1,Y);// 把x1中数据写入Y
int i=0,j=0;
unsigned long dwx,dwy;
unsigned char *puD;
unsigned char *puS;
unsigned char *y_pixels=(unsigned char *)malloc(yh*yw*3);
//通过for的双重循环循环拷贝字节数到目标文件
for(int i=0;i
dwy=i*t;
puD=y_pixels+i*x2.biWidth*3;//完整的for循环存入的字节量
puS=x_pixels+dwy*x2.biWidth*3;//缩小/放大
for(int j=0;j
//数据拷贝
dwx=j*t;
memcpy(puD+j*3,puS+ dwx*3,3);//复制字节到目标文件
}
}
fseek(Y,54,SEEK_SET);//通过fseek函数进行定位,以写入目标文件所需的数据
fwrite(y_pixels,yw*yh*3,1,Y);//写入目标文件所需的数据
printf("执行成功\n");
free(x_pixels);free(y_pixels);//释放内存
fclose(X);fclose(Y); //关闭打开的文件
}
//主程序
int main(int argc,char* argv[])
{
WTheader x1;XXheader x2;//创建结构体变量x1,x2分别储存位图文件头和位图信息头
double t=atof(argv[2])/100.0;//通过读取第二个行参数计算伸缩比例
memset(&x1,0,sizeof(WTheader));//把x1中置0
memset(&x2,0,sizeof(XXheader));//把x2中置0
printf("%f\n",t);//打印伸缩比例
F(x1,x2,t,argv[1],argv[3]);//通过读取第一个行参数和第三个行参数计算伸缩比例
return 0;
}
今天的小作文让我想起怜之前在fc上向粉丝介绍自己lost boy的mv剧本:
So we know, I made it a generalized character, so you could either relate to the character, or you can relate to us or the friends. Because you have to realize that, sometimes it's you maybe, sometimes I'm mad, pushing everything away.
But the most important thing is, the people around you, no matter what you get it, accept them.
怜怜
So we know, I made it a generalized character, so you could either relate to the character, or you can relate to us or the friends. Because you have to realize that, sometimes it's you maybe, sometimes I'm mad, pushing everything away.
But the most important thing is, the people around you, no matter what you get it, accept them.
怜怜
Aš supjaustyti iki pusės, palaimintas į išvaizdą širdyje, Gu gydytojas yra penkių metrų atstumu, mano kryptimi, arba ploni pečiai, vaikščioti kaip katė nėra garso. Aš sn aplink mano riešo ir greitai bandė baigti darbą rankoje, bet skubėti, žievelės sumušė ... Dievas žino, kokia aš nuobodi išraiška. Jis priėjo prie manęs ir sustojo, žiūrėdamas tarp manęs ir žievelių ant žemės逡
✋热门推荐