Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 哈夫曼算法在图像文件中的实现_C - Fatal编程技术网

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"

我用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");
    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”标志),情况已经是这样了。