❶ 那位大侠有c语言的BMP格式图片的压缩程序啊(二值也行)
不是很明白你的问题。 压缩工具有很多种,tar gzip bzip 等, linux 下,都有源码。 可以下载供你编译后使用。
❷ c语言 压缩,解压缩BMP图片的源代码在vs上能运行的
处理图片一般需要第三方库,我只用过opencv,你可以简单学下
❸ 用C语言读取16位bmp图片的每个像素的信息~
没有什么不同。
读出 BITMAPINFO 结构:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
以后,
BITMAPINFOHEADER 结构 里就有 biBitCount
biBitCount 等于 16 就是16位,等于24 就是24位,等于32 就是32位。
颜色在哪,要考虑 biCompression 压缩方法,若等于 BI_RGB, bmiColors 就等于 NULL. 在 bitmap 数组里 每个WORD 就是 一个像素点. 5个 bits 兰,5个 bits 绿,再5个 bits 红,最高位不用。
其它方法自己看资料吧。
❹ 求16位BMP转JPEG的压缩算法
Photoshop CS2 转换 不过失不失真 久看你怎么调 它能 调很多中 不过还是建议你 找找关于PS的有关转换的文章 那样比较好 因为久算我现在说了 你也不明白
❺ c语言,怎样读取一个BMP图片
#ifndef IMAGE_H
#define IMAGE_H
void image_info(FILE* file);
void image_save(FILE *file);
void image_gray();
void image_binarization();
void image_opposite();
void image_channel(); //抽取RGB通道
void image_bright();//改变图像亮度
typedef struct BMP
{
//14字节
unsigned short bfType; //文件标识 2字节 必须为BM
unsigned int bfSize; //文件大小 4字节
unsigned short bfReserved1; //保留,每字节以"00"填写 2字节
unsigned short bfReserved2; //同上 2字节
unsigned int bfOffBits; //记录图像数据区的起始位置(图象数据相对于文件头字节的偏移量)。 4字节
//40字节
unsigned int biSize; //表示本结构的大小 4字节
int biWidth; //位图的宽度 4字节
int biHeight; //位图的高度 4字节
unsigned short biPlanes; //永远为1 , 2字节
unsigned short biBitCount; //位图的位数 分为1 4 8 16 24 32 2字节
unsigned int biCompression; //压缩说明 4字节
unsigned int biSizeImage; //表示位图数据区域的大小以字节为单位 4字节
int biXPelsPerMeter; //用象素/米表示的水平分辨率 4字节
int biYPelsPerMeter; //用象素/米表示的垂直分辨率 4字节
unsigned int biClrUsed; //位图使用的颜色索引数 4字节
unsigned int biClrImportant; //对图象显示有重要影响的颜色索引的数目 4字节
} BMP;
int line_byte;
unsigned char *imagedata;
extern BMP bmp;
extern int line_byte;
extern unsigned char *imagedata;
#endif
//image_rw.c文件
#include<stdio.h>
#include<stdlib.h>
#include"image.h"
void image_info(FILE *file)
{
int times=3; //输入文件名次数。
char bmp_name[10]; //文件名
printf("\nplease enter a file name for reading:");
do
{
if (times<3)
{
printf("\nplease enter a file name for reading again:");
}
fflush(stdin);
gets(bmp_name);
//printf("\n%s",bmp_name);
file=fopen(bmp_name,"rb+"); //打开一个文件进行读写操作。
--times;
if (file==NULL)
{
printf("\nerror opening %s for reading! ",bmp_name);
}
else
{
break;
}
}
while(times!=0);
if (times==0)
{
printf("\nsorry, shutdown!");
exit(1);
}
//读取图像信息
fseek(file,0L,0); //读取图像文件类型
fread(&bmp,sizeof(BMP),1,file);
printf("\n bmp tpye: %u",bmp.bfType);
printf("\n bmp size: %u",bmp.bfSize);
printf("\n bmp reserved1: %u",bmp.bfReserved1);
printf("\n bmp reserved2: %u",bmp.bfReserved2);
printf("\n bmp offBits: %u",bmp.bfOffBits);
printf("\n bmp bisize: %u",bmp.biSize);
printf("\n bmp biWidth: %d",bmp.biWidth);
printf("\n bmp biHeight: %d",bmp.biHeight);
printf("\n bmp biplans: %u",bmp.biPlanes);
printf("\n bmp biBitCount: %u",bmp.biBitCount);
printf("\n bmp biCompression: %u",bmp.biCompression);
printf("\n bmp biSizeImage: %u",bmp.biSizeImage);
printf("\n bmp biXPelsPerMeter: %d",bmp.biXPelsPerMeter);
printf("\n bmp biYPelsPerMeter: %d",bmp.biYPelsPerMeter);
printf("\n bmp biClrUsed: %u",bmp.biClrUsed);
printf("\n bmp biClrImportant: %u\n",bmp.biClrImportant);
line_byte=(bmp.biWidth*bmp.biBitCount/8+3)/4*4; //获得图像数据每行的数据个数
//printf("dfsa%u",bmp.line_byte);
//bmp.imagedata=NULL;
imagedata=(unsigned char*)malloc(bmp.biSizeImage);
fseek(file,(long)bmp.bfOffBits,0);
fread(imagedata,sizeof(unsigned char),bmp.biSizeImage,file);
fclose(file);
}
//保存图像
void image_save(FILE *file)
{
int times=3; //输入文件名次数。
char bmp_name[10]; //文件名
//int i; //记录数据区个数
printf("\nplease enter a file name for writeing:");
do
{
if (times<3)
{
printf("\nplease enter a file name for writeing again:");
}
fflush(stdin);
gets(bmp_name);
printf("\n%s",bmp_name);
file=fopen(bmp_name,"wb+"); //打开一个文件进行读写操作。
--times;
if (file==NULL)
{
printf("\nerror opening %s for writing",bmp_name);
}
else
{
break;
}
}
while(times!=0);
if (times==0)
{
printf("\nsorry, shutdown!");
exit(1);
}
//写文件头
printf("\n%s",bmp_name);
fseek(file,0L,0); //图像文件类型
fwrite(&(bmp.bfType),sizeof(short),1,file);
printf("\n bmp tpye: %d",bmp.bfType);
fseek(file,2L,0); //图像文件大小
fwrite(&(bmp.bfSize),sizeof(int),1,file);
printf("\n bmp size: %d",bmp.bfSize);
fseek(file,6L,0); //图像文件保留字1
fwrite(&(bmp.bfReserved1),sizeof(short),1,file);
printf("\n bmp reserved1: %d",bmp.bfReserved1);
fseek(file,8L,0); //图像文件保留字2
fwrite(&(bmp.bfReserved2),sizeof(short),1,file);
printf("\n bmp reserved2: %d",bmp.bfReserved2);
fseek(file,10L,0);//数据区的偏移量
fwrite(&(bmp.bfOffBits),sizeof(short),1,file);
printf("\n bmp offBits: %d",bmp.bfOffBits);
fseek(file,14L,0);//文件头结构大小
fwrite(&(bmp.biSize),sizeof(int),1,file);
printf("\n bmp bisize: %d",bmp.biSize);
fseek(file,18L,0);//图像的宽度
fwrite(&(bmp.biWidth),sizeof(int),1,file);
printf("\n bmp biWidth: %d",bmp.biWidth);
fseek(file,22L,0);//图像的高度
fwrite(&(bmp.biHeight),sizeof(int),1,file);
printf("\n bmp biHeight: %d",bmp.biHeight);
fseek(file,24L,0);//图像的面数
fwrite(&(bmp.biPlanes),sizeof(short),1,file);
printf("\n bmp biplans: %d",bmp.biPlanes);
fseek(file,28L,0);//图像一个像素的字节数
fwrite(&(bmp.biBitCount),sizeof(short),1,file);
printf("\n bmp biBitCount: %d",bmp.biBitCount);
fseek(file,30L,0);//图像压缩信息
fwrite(&(bmp.biCompression),sizeof(short),1,file);
printf("\n bmp biCompression: %d",bmp.biCompression);
fseek(file,34L,0);//图像数据区的大小
fwrite(&(bmp.biSizeImage),sizeof(int),1,file);
printf("\n bmp biSizeImage: %d",bmp.biSizeImage);
fseek(file,38L,0);//水平分辨率
fwrite(&(bmp.biXPelsPerMeter),sizeof(int),1,file);
printf("\n bmp biXPelsPerMeter: %d",bmp.biXPelsPerMeter);
fseek(file,42L,0);//垂直分辨率
fwrite(&(bmp.biYPelsPerMeter),sizeof(int),1,file);
printf("\n bmp biYPelsPerMeter: %d",bmp.biYPelsPerMeter);
fseek(file,46L,0);//颜色索引数
fwrite(&(bmp.biClrUsed),sizeof(int),1,file);
printf("\n bmp biClrUsed: %d",bmp.biClrUsed);
fseek(file,50L,0);//重要颜色索引数
fwrite(&(bmp.biClrImportant),sizeof(int),1,file);
printf("\n bmp biClrImportant: %d\n",bmp.biClrImportant);
fseek(file,(long)(bmp.bfOffBits),0);
fwrite(imagedata,sizeof(unsigned char),bmp.biSizeImage,file);
fclose(file);
}
//pixProcess.c文件
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include"image.h"
//灰度化
void image_gray()
{
int i,j;
unsigned char tmp;
for (i=0;i<bmp.biHeight;i++)
{
for (j=0;j<line_byte/3;j++)
{
tmp=0.11*(*(imagedata+i*line_byte+j*3+0))+0.59*(*(imagedata+i*line_byte+j*3+1))+0.3*(*(imagedata+i*line_byte+j*3+2));
imagedata[i*line_byte+j*3+0]=tmp;
imagedata[i*line_byte+j*3+1]=tmp;
imagedata[i*line_byte+j*3+2]=tmp;
//printf("\nnidsfh%d %d",i,j);
}
}
}
//二值化
void image_binarization()
{
int i,j;
for (i=0;i<bmp.biHeight;i++)
{
for (j=0;j<line_byte;j++)
{
if ((*(imagedata+i*line_byte+j))<128)
{
imagedata[i*line_byte+j]=0;
}
else
{
imagedata[i*line_byte+j]=255;
}
}
}
}
void image_opposite() //反相
{
int i,j;
for (i=0;i<bmp.biHeight;i++)
{
for (j=0;j<line_byte;j++)
{
imagedata[i*line_byte+j]=abs(255-imagedata[i*line_byte+j]);
}
}
}
void image_channel() //抽取RGB通道
{
int i,j;
char rgb;
printf("\nplease enter a char(r/g/b): ");
fflush(stdin);
scanf("%c",&rgb);
if (rgb=='b')
{
for (i=0;i<bmp.biHeight;i++)
{
for (j=0;j<line_byte/3;j++)
{
imagedata[i*line_byte+3*j+1]=0;
imagedata[i*line_byte+3*j+2]=0;
}
}
}
else if(rgb=='g')
{
for (i=0;i<bmp.biHeight;i++)
{
for (j=0;j<line_byte/3;j++)
{
imagedata[i*line_byte+3*j]=0;
imagedata[i*line_byte+3*j+2]=0;
}
}
}
else
{
for (i=0;i<bmp.biHeight;i++)
{
for (j=0;j<line_byte/3;j++)
{
imagedata[i*line_byte+3*j]=0;
imagedata[i*line_byte+3*j+1]=0;
}
}
}
}
void image_bright()//改变图像亮度
{
int level;
int i,j;
printf("\n please enter the level of brightness[-255 to 255] :");
fflush(stdin);
scanf("%d",&level);
for (i=0;i<bmp.biHeight;i++)
{
for (j=0;j<line_byte;j++)
{
if (level>=0)
{
if ((imagedata[i*line_byte+j]+level)>255)
imagedata[i*line_byte+j]=255;
else
imagedata[i*line_byte+j]+=level;
}
else
{
if ((imagedata[i*line_byte+j]-abs(level))<0)
imagedata[i*line_byte+j]=0;
else
imagedata[i*line_byte+j]+=level;
}
}
}
}
//void image_create() //创建一幅24位BMP图像文件。
//{
//main.c文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include"image.h"
BMP bmp;
int main()
{
FILE *file=NULL;
int choose;
char gono;
do
{
image_info(file); //imagedata已经分配了动态内存,但是没有释放
printf("\n 1.image_opposite");
printf("\n 2.image_gray");
printf("\n 3.image_binarization");
printf("\n 4.image_channel");
printf("\n 5.image_brightness");
//printf("6.image_opposite");
//printf("7.image_opposite");
printf("\nchoose your options:");
fflush(stdin);
scanf("%d",&choose);
switch(choose)
{
case 1:
image_opposite();
image_save(file);
free(imagedata);
break;
case 2:
image_gray();
image_save(file);
free(imagedata);
break;
case 3:
image_binarization();
image_save(file);
free(imagedata);
break;
case 4:
image_channel();
image_save(file);
free(imagedata);
break;
case 5:
image_bright();
image_save(file);
free(imagedata);
break;
default:
printf("\n wrong choose!");
}
printf("\nlet's go on?(y/n):");
fflush(stdin);
scanf("%c",&gono);
if (gono=='n')
{
printf("\nbye bye!");
break;
}
}
while(1);
return 0;
}
❻ 如何用c语言实现压缩图片内存大小
是(row,col,value),这样把所有不为零的值组成一个向量。这种存储方式比二维数组节省了不少空间,当然还可以进一步节省,因为三元组里面row或者col重复存储了,一行或者一列存一次就行了,按这种思路走下去就是行压缩存储了。
那具体什么是行压缩存储呢?行压缩存储的思想就是,把所有不为零的值按行访问的顺序组成一个向量,然后再把每一行值不为0的列的下标存下来,这个两个向量的大小和稀疏矩阵中不为0的值得个数相同,当然要实现对行压缩矩阵的访问,还要把每一行的不为0的列的下标在第二个向量中开始的位置存下来,有人把这个叫做指针。有了这三个向量就可以实现对矩阵实现高效的按行访问了。行压缩存储比三元组优秀的不仅是空间的压缩,还有就是行访问时的高效。三元组如果是有序的,可以二分查找来访问一行,但是行压缩存储按行访问时的时间复杂度是常数级的。 大家可以参考下面这个行压缩矩阵示意图:
❼ 如何用C语言程序从bmp格式的图片中读取图片的灰度值
1、首先要了解bmp位图的格式,搜索些技术支持文档,bmp位图基本上是分4大部分,文件信息结果部分,文件头信息结果部分,调色板结果部分,后面就是数据实体部分。及其每个部分对应有用的信息。比如长宽。当然长宽信息你自己可以从window系统下看得到。打开bmp文件,把前面三部分的字节总数给固定下来,逐个字符读取,然后读取数据实体部分,输出就可以了。
2、例程:
#include<stdio.h>
#include<stdlib.h>
#pragmapack(2)
/*定义WORD为两个字节的类型*/
typedefunsignedshortWORD;
/*定义DWORD为e四个字节的类型*/
typedefunsignedlongDWORD;
/*位图文件头*/
typedefstructBMP_FILE_HEADER
{
WORDbType;/*文件标识符*/
DWORDbSize;/*文件的大小*/
WORDbReserved1;/*保留值,必须设置为0*/
WORDbReserved2;/*保留值,必须设置为0*/
DWORDbOffset;/*文件头的最后到图像数据位开始的偏移量*/
}BMPFILEHEADER;
/*位图信息头*/
typedefstructBMP_INFO
{
DWORDbInfoSize;/*信息头的大小*/
DWORDbWidth;/*图像的宽度*/
DWORDbHeight;/*图像的高度*/
WORDbPlanes;/*图像的位面数*/
WORDbBitCount;/*每个像素的位数*/
DWORDbCompression;/*压缩类型*/
DWORDbmpImageSize;/*图像的大小,以字节为单位*/
DWORDbXPelsPerMeter;/*水平分辨率*/
DWORDbYPelsPerMeter;/*垂直分辨率*/
DWORDbClrUsed;/*使用的色彩数*/
DWORDbClrImportant;/*重要的颜色数*/
}BMPINF;
/*彩色表*/
typedefstructRGB_QUAD
{
WORDrgbBlue;/*蓝色强度*/
WORDrgbGreen;/*绿色强度*/
WORDrgbRed;/*红色强度*/
WORDrgbReversed;/*保留值*/
}RGBQUAD;
intmain()
{
FILE*fp;
BMPFILEHEADERfileHeader;
BMPINFinfoHeader;
longoffset,bmpImageSize,width,height,bytesPerPixel,size,bitCount;
//inti,j;
//unsignedchar**p;
WORDc;
if((fp=fopen("5.bmp","rb"))==NULL)
{
printf("Cann'topenthefile! ");
exit(0);
}
fseek(fp,0,0);
fread(&fileHeader,sizeof(fileHeader),1,fp);
fread(&infoHeader,sizeof(infoHeader),1,fp);
//计算并输出位图数据的偏移量,图像的大小,宽度和高度,每个像素点所占的字节
size=fileHeader.bSize;
offset=fileHeader.bOffset;
bmpImageSize=infoHeader.bmpImageSize;
width=infoHeader.bWidth;
height=infoHeader.bHeight;
bitCount=infoHeader.bBitCount;
bytesPerPixel=infoHeader.bBitCount/8;
printf("%d%d%d%d%d%d ",size,offset,bmpImageSize,width,height,bitCount,bytesPerPixel);
//输出每个像素点所占字节中的内容
c=fgetc(fp);
while(!feof(fp))
{
printf("%x",c);
c=fgetc(fp);
}
printf(" ");
fclose(fp);
return0;
}
❽ 在压缩文件中,已得知01二进制编码顺序怎么用C语言写入二进制文件中实现压缩、
我先讲解下压缩的原理,你懂了就知道怎么去实现了。 压缩的原理就是用较短的子串来表示较长的子串。通俗的说比如我发明一种算法将“”可以简化成“50,1”,表示“50个1”,本来50个字的就可以用“50,1”这4个字表示,解压的时候再把“50,1”还原成“”
所以一个bmp图片可以压缩的很厉害,因为有很多重复性的信息,而jpeg在压缩也压缩不了多少,因为没有太多重复性信息。你把一幅全黑的bmp图片可以压缩的很小,而一个色彩斑斓的bmp图片则相对来说压缩处来的文件就会比较大。
❾ 用C语言编写程序处理图片bmp文件 1.读取图片的宽度,高度,每个像素所需的位数,水平分辨率,垂直
#include<windows.h>
//读bmp图片需要两个结构
#pragmapack(push,enter_defBM,1)//指定内存对齐单位为1。
typedefstructtagBmpFileHeader
{
WORDbfType;//文件类型BM
DWORDbfSize;//文件大小
WORDbfReserved1;//保留字
WORDbfReserved2;//保留字
DWORDbfOffBits;//位图的数据信息离文件头的偏移量
}BFH;
typedefstructtagBmpImgHeader
{
DWORDbiSize;//表示本结构的大小,0X28
LONGbiWidth;//位图的宽度
LONGbiHeight;//位图的高度
WORDbiPlanes;//位面数永远为1
WORDbiBitCount;//位图的位数
DWORDbiCompression;//压缩类型
DWORDbiSizeImage;//表示位图数据区域的大小
LONGbiXPelsPerMeter;//表示显示设备的水平分辨率
LONGbiYPelsPerMeter;//表示显示设备的垂直分辨率
DWORDbiClrUsed;//实际使用的颜色数目
DWORDbiClrImportant;//重要的颜色数量
}BIH;
#pragmapack(pop,enter_defBM)//恢复默认内存对齐单位。
#defineHDIBHANDLE//位图句柄
DWORDWINAPIDIBNumColors(BYTE*data)
{
WORDwBitCount;
DWORDdwClrUsed=((BIH*)data)->biClrUsed;
if(dwClrUsed!=0)return(WORD)dwClrUsed;
wBitCount=((BIH*)data)->biBitCount;
return1<<wBitCount;
}
WORDWINAPIPaletteSize(BYTE*data)
{
return(WORD)(::DIBNumColors(data)*sizeof(RGBQUAD));
}
BYTE*WINAPIFindDIBBits(BYTE*data)
{
return(data+*(DWORD*)data+::PaletteSize(data));
}
//获取Bmp的宽度
DWORDFARDIBWidth(constBYTE*data)
{
BIH*pbmi;
pbmi=(BIH*)data;
if(pbmi->biSize==sizeof(BIH))returnpbmi->biWidth;
elsereturn-1;
}
//获取Bmp的高度
DWORDFARDIBHeight(constBYTE*data)
{
BIH*pbmi;
pbmi=(BIH*)data;
if(pbmi->biSize==sizeof(BIH))returnpbmi->biHeight;
elsereturn-1;
}
//从文件读取Bmp图像数据
HDIBWINAPIReadDIBFile(FILE*fp)
{
BFHbmf;
HDIBhDIB;
BYTE*pData;
rewind(fp);
if(fread(&bmf,sizeof(BFH),1,fp)!=1)returnNULL;//文件读取错误
if(bmf.bfType!=19778)returnNULL;//文件类型错误
hDIB=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,bmf.bfSize);//为DIB分配内存
if(hDIB==0)returnNULL;//内存分配失败。
pData=(BYTE*)::GlobalLock((HGLOBAL)hDIB);//锁定
if(fread(pData,1,bmf.bfSize-sizeof(BFH),fp)!=(bmf.bfSize-sizeof(BFH)))//文件读取错误
{
::GlobalUnlock((HGLOBAL)hDIB);//解除锁定
::GlobalFree((HGLOBAL)hDIB);//释放内存
returnNULL;
}
::GlobalUnlock((HGLOBAL)hDIB);//解除锁定
returnhDIB;//返回DIB句柄
}
BOOLWINAPIPaintDIB(HDChDC,intposX,intposY,HDIBhDIB)
{
BYTE*pDIBHd;//BITMAPINFOHEADER指针
BYTE*pDIBBits;//DIB象素指针
BOOLbSuccess=FALSE;//成功标志
HPALETTEhPal=NULL;//DIB调色板
//HPALETTEhOldPal=NULL;//以前的调色板
if(hDIB==NULL)returnFALSE;//判断DIB对象是否为空
pDIBHd=(BYTE*)::GlobalLock((HGLOBAL)hDIB);//锁定DIB
pDIBBits=::FindDIBBits(pDIBHd);//找到DIB图像象素起始位置
::SetStretchBltMode(hDC,COLORONCOLOR);//设置显示模式
//调用SetDIBitsToDevice()来绘制DIB对象
bSuccess=::SetDIBitsToDevice(hDC,//hDC
posX,posY,
((BIH*)pDIBHd)->biWidth,//nDestWidth
((BIH*)pDIBHd)->biHeight,//nDestHeight
0,//SrcX
0,//SrcY
0,//nStartScan
(WORD)DIBHeight(pDIBHd),//nNumScans
pDIBBits,//lpBits
(LPBITMAPINFO)pDIBHd,//lpBitsInfo
DIB_RGB_COLORS);//wUsage
::GlobalUnlock((HGLOBAL)hDIB);//解除锁定
returnbSuccess;
}
//打印位图信息
VOIDWINAPIPrintDIBInfo(HDIBhDIB)
{
BYTE*pDIBHd=(BYTE*)::GlobalLock((HGLOBAL)hDIB);
BIH*pbmi=(BIH*)pDIBHd;
constchar*lp[]=
{
"位图信息长度:%d ",
"位图图像大小:%dx%d ",
"位面数:%d ",
"位图颜色深度:%d ",
"位图数据压缩类型:%d ",
"位图数据区域大小:%d ",
"位图分辨率:水平%ddpi,垂直%ddpi ",
};
printf("WindowsV3cBitmapInfoHeader信息 ");
printf(lp[0],pbmi->biSize);
printf(lp[1],pbmi->biWidth,pbmi->biHeight);
printf(lp[2],pbmi->biPlanes);
printf(lp[3],pbmi->biBitCount);
printf(lp[4],pbmi->biCompression);
printf(lp[5],pbmi->biSizeImage);
printf(lp[6],(LONG)(pbmi->biXPelsPerMeter*0.0254f+0.5f),(LONG)(pbmi->biYPelsPerMeter*0.0254f+0.5f));
::GlobalUnlock((HGLOBAL)hDIB);//解除锁定
}intmain(intargc,char*argv[])
{
HDIBx;
FILE*fp=fopen("1.bmp","rb");
if(fp==NULL)return-1;
x=ReadDIBFile(fp);
printf("DIBhandle%u",x);
PaintDIB(GetDC(NULL),0,0,x);
PrintDIBInfo(x);
return0;
}