| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 900 人关注过本帖
标题:又问一个问题!
只看楼主 加入收藏
努力学编程
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-8-25
收藏
 问题点数:0 回复次数:18 
又问一个问题!
  怎么用C写一个程序,让它能够读一个位图(比如1.bmp),再写到另一个文件。也就是相当于复制。
搜索更多相关主题的帖子: 能够 
2007-08-26 17:14
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 

#include <stdio.h>
#include <conio.h>
int main(void)
{
char ch;
FILE *fpOut,*fpIn;
fpOut=fopen("1.gif","rb+");
fpIn=fopen("2.gif","wb+");
if(fpOut==NULL || fpIn==NULL)
{
printf("Cannot open the img!\n");
exit(1);
}
ch=fgetc(fpOut);
while(!feof(fpOut))
{
fputc(ch,fpIn);
ch=fgetc(fpOut);
}
fclose(fpOut);
fclose(fpIn);
printf("Complete!Press any key to exit...\n");
getch();
return 0;
}


偶学编程,也许本身就是一个错。。。
2007-08-26 17:31
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 
你从哪里烤的答案啊

[此贴子已经被作者于2007-8-26 17:39:37编辑过]



You have lots more to work on! Never give up!c language!
2007-08-26 17:39
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
我以前写的~~~~~

偶学编程,也许本身就是一个错。。。
2007-08-26 17:44
努力学编程
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-8-25
收藏
得分:0 
以下是引用coachard在2007-8-26 17:31:16的发言:

#include <stdio.h>
#include <conio.h>
int main(void)
{
char ch;
FILE *fpOut,*fpIn;
fpOut=fopen("1.gif","rb+");
fpIn=fopen("2.gif","wb+");
if(fpOut==NULL || fpIn==NULL)
{
printf("Cannot open the img!\n");
exit(1);
}
ch=fgetc(fpOut);
while(!feof(fpOut))
{
fputc(ch,fpIn);
ch=fgetc(fpOut);
}
fclose(fpOut);
fclose(fpIn);
printf("Complete!Press any key to exit...\n");
getch();
return 0;
}


我说的是bmp,是要考虑BMP格式的,比如他的文件头,信息头……

2007-08-26 18:28
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
不知道你试过没有就在这么大喊大叫,要实现图片复制,这段代码绰绰有余!

难道GIF就没有文件头???

[此贴子已经被作者于2007-8-26 18:33:13编辑过]


偶学编程,也许本身就是一个错。。。
2007-08-26 18:31
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 
不要生气呀,慢慢来呀

You have lots more to work on! Never give up!c language!
2007-08-26 18:33
努力学编程
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-8-25
收藏
得分:0 

#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
void main()
{
/* BMP文件头 */
typedef struct
{
unsigned short bfType; /* 文件类型 */
unsigned long bfSize; /* 文件大小 */
unsigned short bfReserved1; /* 保留位 */
unsigned short bfReserved2; /* 保留位 */
unsigned long bfOffBits; /* 数据偏移位置 */
} HEAD;

/* BMP信息头 */
typedef struct
{
unsigned long biSize; /* 此结构大小 */
long biWidth; /* 图像宽度 */
long biHeight; /* 图像高度 */
unsigned short biPlanes; /* 调色板数量 */
unsigned short biBitCount; /* 每个象素对应的位数,24:24位图,32:带alpha通道的24位图 */
unsigned long biCompression; /* 压缩 */
unsigned long biSizeImage; /* 图像大小 */
long biXPelsPerMeter;/* 横向分辨率 */
long biYPelsPerMeter;/* 纵向分辨率 */
unsigned long biClrUsed; /* 颜色使用数 */
unsigned long biClrImportant; /* 重要颜色数 */
}BMPINFOHEADER;

FILE *file ;
HEAD bmpFile;
BMPINFOHEADER bmpInfo;
char *pbuffer;

/* 打开文件 */
file = fopen("LENNA.BMP", "rb");
if (file== NULL)
{
printf(" openning error\n");
}
/* 读入文件头 */
fread(&bmpFile, sizeof(HEAD),1, file);
if (bmpFile.bfType != 0x4D42)
{
printf(" reading error!!!");
}
printf("%x\n",bmpFile.bfType); /* 验证文件类型 */
printf("%ld\n",bmpFile.bfSize);
printf("%ld\n",bmpFile.bfOffBits);

/* 读信息头 */
fread(&bmpInfo, sizeof(BMPINFOHEADER), 1, file);
printf("%ld\n",bmpInfo.biSizeImage);
printf("%d\n",bmpInfo.biWidth);
getch();

}
这个程序我用的是512*512的bmp图象。但是读/* 读信息头 */下面读到的数据都是错误的,比如bmpInfo.biWidth应该是512才对啊。

2007-08-26 18:40
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
原来你想把文件给拆解读,分别读入

那你这可不单单是实现复制这么简单的功能~~~~~`

偶学编程,也许本身就是一个错。。。
2007-08-26 18:48
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
很简单的原因:内存对齐
2007-08-26 19:00
快速回复:又问一个问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021773 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved