C 哈夫曼算法在图像文件中的实现
我用C语言开发了一个基于哈夫曼算法的程序 现在,我想对图像文件使用相同的算法(以前的程序可以压缩C 哈夫曼算法在图像文件中的实现,c,C,我用C语言开发了一个基于哈夫曼算法的程序 现在,我想对图像文件使用相同的算法(以前的程序可以压缩.txt文件) 如何使用c程序输入图像文件并使用算法对其进行压缩 void freq() { int i=0,j,k,f,n=0; char ch; clrscr(); printf("\nEnter path of the text file:"); fflush(stdin); gets(path); f1=fopen(path,"rb"
.txt
文件)
如何使用c程序输入图像文件并使用算法对其进行压缩
void freq()
{
int i=0,j,k,f,n=0;
char ch;
clrscr();
printf("\nEnter path of the text file:");
fflush(stdin);
gets(path);
f1=fopen(path,"rb");
if(f1==NULL)
{
printf("cant open %s",path);
getch();
exit(1);
}
while(1)
{
f=0;
ch=fgetc(f1);
if(ch==EOF)
break;
for(j=0;j<n;j++)
{
if(ch==arr[j])
f=1;
}
if(f==1)
continue;
else
{
arr[i]=ch;
ptr[i][0]=arr[i];
ptr[i][1]='\0';
i++;
}
n++;
}
arr[i]='\0';
noc=i-1;
}
void freq()
{
int i=0,j,k,f,n=0;
char ch;
clrsc();
printf(“\n文本文件的输入路径:”);
fflush(stdin);
获取(路径);
f1=fopen(路径“rb”);
如果(f1==NULL)
{
printf(“无法打开%s”,路径);
getch();
出口(1);
}
而(1)
{
f=0;
ch=fgetc(f1);
如果(ch==EOF)
打破
对于(j=0;j,正如Cosmin Prud在他的评论中所说:“将图像文件重命名为.txt”。现在,当然你不必这么做,他的意思是:哈夫曼编码算法不知道它得到什么样的输入,它不在乎
因此,与其读取.txt文件,不如读取图像文件并将其交给哈夫曼算法。对于该算法而言,它们都是位,不管是英语、克林贡语、BMP还是
当然,在图像文件上使用哈夫曼编码来压缩它可能不是最好的主意。有一个原因是存在像JPG这样的文件格式。他们利用人眼对图像上的某些有损转换不敏感的事实,并使用它来删除信息,因此他们必须编码更少的数据。哈夫曼编码不能做到这一点,因为它是通用的、无损的
[编辑]我还没有看过你发布的代码,但是我第一眼就注意到了一个错误:fgetc
返回一个int
,而不是一个char
,因为它的名字可能会让你相信。所以最好更改ch
的定义,让我们看看你的代码。也许我们可以看看它并给出建议。重命名你的图像文件to有一个.TXT
扩展名。完成后,您现在可以使用基于TXT的哈夫曼编码算法了!代码太长了。我只需上传输入部分void freq(){int i=0,j,k,f,n=0;char ch;//FILE*f1,*f2;clrsc();printf(\n文本文件的输入路径:);fflush(stdin);get(path);f1=fopen(path,“rb”);if(f1==NULL){printf(“无法打开%s”,路径);getch();退出(1);}而(1){f=0;ch=fgetc(f1);if(ch==EOF)中断;用于(j=0;j@cosmin:通常情况下,我无法将图像文件重命名为.txt文件。@user720101请编辑文本并将代码放在其中,注释中的代码完全不可读。别忘了将其放在代码块中,以便自动获得彩色标记和间距……但文件必须以二进制模式f打开或者程序是可移植的。是的,但是如果你查看OP的代码(“code>fopen
调用中的rb”标志),情况已经是这样了。