2011-05-18 202 views
0

我有一个像素数组包含从0到255的值... 我已将它传递给我的C++函数... 这个像素数组我想将它保存为jpeg图像文件...将像素数组保存为jpeg图像文件C++

如何使用正确的编码?

我有阵列转换成二进制字符串 ,并将其保存到下面的代码的文件,但它只是保存4字节大小的空白图像...

FILE *file = fopen("/media/internal/wallpapers/04.jpeg", "w+"); 
    fwrite(binaryStr , 1 , sizeof(binaryStr) ,file);  

    fclose(file); 

thnks

+1

发布binaryStr的定义。 – 2011-05-18 12:21:26

+0

那段代码不会为你写一个jpeg。它只会将该二进制数据转储到扩展名为jpeg的文件中。难怪你会得到一个空的图像文件。获取一个jpeg库,它也可以将头文件等写入文件。 – Sriram 2011-05-18 12:44:17

回答

0

从您的描述中可以看出,您需要将YUV数据转换为jpeg。正确? Imagemagick是一个非常强大的工具,可以处理这个问题。

来自wikipedias条目YUV: 通常将Y'值移位并缩放到范围[16,235],而不是使用[0,255]的全部范围。这种令人困惑的做法源于MPEG标准,并解释了为什么16被添加到Y'以及为什么基本变换中的Y'系数总和为220而不是255. U和V值(可能是正数或负数)与128让他们总是积极的

iee 0-255不是YUV数据的有效范围

7

使用libjpeg。不要试图自己重新实现jpeg编码,它有太多的方法可能会出错。

0

似乎sizeof(binaryStr)是4.因此,您需要获取binaryStr的长度,而不是sizeof(指针)的大小。而且更简单的是使用像libjpeg这样已经熟成的东西。

相关问题