
正文
c语言保存图片函数 c语言怎么保存数据文件
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
用c语言如何读取和保存jpg图片文件?
有这样一个二进制文件,大小在100M左右,里面存放了多张JPG图片,文件格式如下:
无关数据区
JPG图片数据区
无关数据区
JPG图片数据区
无关数据区
JPG图片数据区
......
已知JPG图片起始标志为:“FF
D8
FF
E0
00
10
4A”,结束标志为:“FF
D9”。
现想把这些JPG图片数据从该文件中读出来,生成一个个单独的图片文件,该如何做呢?
帮你写了个程序,
测试了只含有一个图片信息的文件
int
len=0;
int
filesn=0;
void
ReadJpg(CFile
*sfp,const
char
*dstfile,unsigned
char
a,unsigned
char
b)
{
CFile
nf;
nf.Open(dstfile,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
unsigned
t=0,t1=0;
nf.Write(a,sizeof(char));
nf.Write(b,sizeof(char));
while(1)
{
sfp-Read(t,sizeof(char));
len++;
nf.Write(t,sizeof(char));
if(t==0xFF)
{
sfp-Read(t1,sizeof(char));
len++;
if(t1==0xD9)
break;
else
nf.Write(t1,sizeof(char));
}
}
nf.Close();
}
调用:
void
test()
{
CFile
fp;
fp.Open("86b05621.jpg",CFile::modeRead|CFile::typeBinary);//文件名改一下
unsigned
char
a=0,b=0;
len=0;
while(1)
{
fp.Read(a,sizeof(char));
len++;
if(len=fp.GetLength())
break;
if(a==0xFF)
{
fp.Read(b,sizeof(char));
len++;
if(b==0xD8)
{
filesn++;
char
filename[256];
sprintf(filename,"Jpg
%d.jpg",filesn);
ReadJpg(fp,filename,a,b);
}
}
}
fp.Close();
}
思路是,先得到FF的值,然后再判断下一位是否是0xD8,
但这里要说明一下,如果你的其它数据信息里也含有FF
D8值的话就会出错了,
所以为保险起见,应该再多比较几位,
JPG的头是固定的,再往下就是EF
E0
00
1E,
建议楼主再往下比较四位比较保险(在程序中稍作修改即可)
你是不是在
分析某个
游戏的或程序的资源文件呀,如果是的话,这个资源文件应该配有一个
索引文件!或在其文件自身。索引可以列表索引,链表形示……
如果是你自已生成的文件包,最好加上索引,因为这样可以提高效率!
相关问答
Q1: c语言的图形函数库有哪些
图形和图像函数包含在graphics.h里面(一) 像素函数56. putpiel() 画像素点函数57. getpixel()返回像素色函数(二) 直线和线型函数58. line() 画线函数59. lineto() 画线函数60. linerel() 相对画线函数61. setlinestyle() 设置线型函数62. getlinesettings() 获取线型设置函数63. setwritemode() 设置画线模式函数(三)、多边形函数64. rectangle() 画矩形函数65. bar() 画条函数66. bar3d() 画条块函数67. drawpoly() 画多边形函数(四)、 圆、弧和曲线函数68. getaspectratio()获取纵横比函数69. circle()画圆函数70. arc() 画圆弧函数71. ellipse()画椭圆弧函数72. fillellipse() 画椭圆区函数73. pieslice() 画扇区函数74. sector() 画椭圆扇区函数75. getarccoords()获取圆弧坐标函数(五)、 填充函数76. setfillstyle() 设置填充图样和颜色函数77. setfillpattern() 设置用户图样函数78. floodfill() 填充闭域函数79. fillpoly() 填充多边形函数80. getfillsettings() 获取填充设置函数81. getfillpattern() 获取用户图样设置函数(六)、图像函数82. imagesize() 图像存储大小函数83. getimage() 保存图像函数84. putimage() 输出图像函数四、图形和图像函数对许多图形应用程序,直线和曲线是非常有用的。但对有些图形只能靠操作单个像素才能画出。当然如果没有画像素的功能,就无法操作直线和曲线的函数。而且通过大规模使用像素功能,整个图形就可以保存、写、擦除和与屏幕上的原有图形进行叠加。(一) 像素函数56. putpixel() 画像素点函数功能: 函数putpixel() 在图形模式下屏幕上画一个像素点。用法: 函数调用方式为void putpixel(int x,int y,int color);说明: 参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色彩值。此函数相应的头文件是graphics.h返回值: 无例: 在屏幕上(6,8)处画一个红色像素点:putpixel(6,8,RED);57. getpixel()返回像素色函数功能: 函数getpixel()返回像素点颜色值。用法: 该函数调用方式为int getpixel(int x,int y);说明: 参数x,y为像素点坐标。函数的返回值可以不反映实际彩色值,这取决于调色板的设置情况(参见setpalette()函数)。这个函数相应的头文件为graphics.h返回值: 返回一个像素点色彩值。例: 把屏幕上(8,6)点的像素颜色值赋给变量color。color=getpixel(8,6);
Q2: c语言调用图片函数
c语言调用图片函数
据我所知Matlab有,imshow(),c好象没有,c只能先将图片读到内存中,经过相关处理后以一定的格式保存到硬盘中,然后再打开图片.
读图和存图需要有专门的函数,这些可以参考:
unsigned
char*
ReadBMPData(int
Width,
int
Height,
char
*fname)//图像的宽和高,图像的位置(包括后缀)
{
unsigned
char*
image
=
new
unsigned
char[Width*Height];
FILE
*fp;
fp
=
fopen(fname,
"rb");
fread(image,
1,
Width*Height,
fp);
fclose(fp);
return
image;
}
///////////////////////////
void
WriteRawData(unsigned
char*
image,
int
Width,
int
Height,
char
*fname)
{
FILE
*fp;
fp
=
fopen(fname,
"wb");
fwrite(image,
1,
Width*Height,
fp);
fclose(fp);
}
Q3: C语言 保存BMP文件
你是怎么处理的呢,处理后的数据在哪呢。在数组中吗,还是说直接在原文件上处理了。
另存为,就是用“wb”方式另外创建一个空文件,把这些数据按照BMP的格式写进去。
Q4: C语言中的图形函数有哪些
一) 像素函数
putpiel() 画像素点函数
getpixel()返回像素色函数
(二) 直线和线型函数
line() 画线函数
lineto() 画线函数
linerel() 相对画线函数
setlinestyle() 设置线型函数
getlinesettings() 获取线型设置函数
setwritemode() 设置画线模式函数
(三)、多边形函数
rectangle() 画矩形函数
bar() 画条函数
bar3d() 画条块函数
drawpoly() 画多边形函数
(四)、 圆、弧和曲线函数
getaspectratio()获取纵横比函数
circle()画圆函数
arc() 画圆弧函数
ellipse()画椭圆弧函数
fillellipse() 画椭圆区函数
pieslice() 画扇区函数
sector() 画椭圆扇区函数
getarccoords()获取圆弧坐标函数
(五)、 填充函数
setfillstyle() 设置填充图样和颜色函数
setfillpattern() 设置用户图样函数
floodfill() 填充闭域函数
fillpoly() 填充多边形函数
getfillsettings() 获取填充设置函数
getfillpattern() 获取用户图样设置函数
(六)、图像函数
imagesize() 图像存储大小函数
getimage() 保存图像函数
putimage() 输出图像函数
Q5: C语言画图__并保存我画的图片
加些分上去c语言保存图片函数,c语言保存图片函数我把代码贴上来。
/* HELLO.C -- Hello, world */
#include graphics.h
#include stdio.h
void save_pic(char *fn,int maxx,int maxy){
typedef long LONG;
typedef unsigned char BYTE;
typedef unsigned long DWORD;
typedef unsigned short WORD;
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
int i,j;
FILE *fp;
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bif;
int color[16]={0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15};
unsigned char rgb[64]={0,0,0,0,0,0,128,0,0,128,0,0,0,128,128,0
,128,0,0,0,128,0,128,0,128,128,0,0,128,128,128,0
,192,192,192,0,0,0,225,0,0,255,0,0,0,255,255,0
,255,0,0,0,255,0,255,0,255,255,0,0,255,255,255,0};
union
{
unsigned char value;
struct
{
unsigned c1:4;
unsigned c2:4;
}color;
}mycolor;
bfh.bfType=0x4d42;
bfh.bfSize=153718;
bfh.bfReserved1=0;
bfh.bfReserved2=0;
bfh.bfOffBits=118;
bif.biSize=40;
bif.biWidth=640;
bif.biHeight=480;
bif.biPlanes=1;
bif.biBitCount=4;
bif.biCompression=0;
bif.biSizeImage=0;
bif.biXPelsPerMeter=0;
bif.biYPelsPerMeter=0;
bif.biClrUsed=0;
bif.biClrImportant=0;
fp=fopen(fn,"wb");
fwrite(bfh,sizeof(bfh),1,fp);
fwrite(bif,sizeof(bif),1,fp);
fwrite(rgb,sizeof(rgb),1,fp);
for(j=maxy-1;j=0;j--){
for(i=0;imaxx;i+=2){
mycolor.color.c2=color[getpixel(i,j)];
mycolor.color.c1=color[getpixel(i+1,j)];
putc(mycolor.value,fp);
}
}
fclose(fp);
}
main()
{
int gd=DETECT,gm;
int maxx,maxy,key;
registerbgidriver(EGAVGA_driver); /*用了这个函数后c语言保存图片函数,c语言保存图片函数你的程序就算在下面没指明BGI
路径也能在每台机器上运行,具体做法见我们论坛上贴子,独立图形程序的建立
不用这函数就要指明TC下BGI 的路径*/
initgraph(gd,gm,"");/*如没有完成上面步骤,""内写上TC中 BGI路径,如我的是d:\\tc3\\BGI*/
maxx=getmaxx()+1;
maxy=getmaxy()+1;
setcolor(14);
circle(maxx/2,maxy/2,50);
setcolor(15);
line(maxx/2-100,maxy/2-50,maxx/2+100,maxy/2-50);
save_pic("t.bmp",maxx,maxy);
getch();
closegraph();
}
c语言保存图片函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言怎么保存数据文件、c语言保存图片函数的信息别忘了在本站进行查找喔。








