2009-09-15 52 views
1

有谁知道任何代码流Jpeg调整大小。我的意思是读取一大块图像(取决于原始来源和目标大小,这显然会有所不同),并调整大小,从而在调整非常大的jpeg时调整内存。显然,这对渐进式jpegs不起作用(或者至少会变得更加复杂),但标准jpeg应该是可能的。流Jpeg Resizer

回答

2

JPEG数据的设计允许简单调整大小到1/2,1/4或1/8大小。其他变化是可能的。这些相同的尺寸缩小在渐进式jpeg上也很容易实现,如果您想缩小尺寸的图像,在渐进式文件中解析的数据量将会减少很多。除此之外,你的问题还不够具体,无法知道你真正想做什么。

将数据大小减少33%的另一个简单技巧是将图像渲染为RGB565位图而不是RGB24(如果您不需要全色彩空间)。

+0

我想要做的是能够将150兆像素图像转换为更小尺寸(例如1兆像素),而无需使用500兆内存将图像加载到内存中。我希望能够将更小的块加载到内存中,并在那些块上工作,而不是整个块。 – 2009-09-16 21:43:54

+0

你想要做什么将需要自定义代码。我从头开始编写自己的JPEG解码器,可以适应您的目的,而不会有太多麻烦。 x/y解码循环需要每行/每行渲染像素的分数。整数部门肯定是最容易实现的。联系我,如果你需要额外的帮助 - [email protected] – BitBank 2009-09-16 21:52:09

1

我不知道一个库可以做到这一点,但它当然是可能的。

假设您的JPEG使用的是8x8像素MCU(像素分组的单位)。我们也可以说你正在减少12到1倍。第一个输出像素需要是输入图像左上角的1​​2x12像素块的平均值。要获得y坐标大于8的输入像素,您需要解码第二行MCU的开始。在解码整个第一行MCU之前,您无法真正解码这些像素。实际上,这可能意味着您需要存储两行解码的MCU。尽管如此,对于12000x12000像素图像(大约150万像素),您可以将内存需求减少12000/16 = 750。这对于PC来说应该足够了。如果您正在寻找嵌入式应用,您可以在读取它们时水平调整行的大小,从而将内存需求减少12倍,代价是复杂性更高一些。

我会找到一个简单的jpeg解码器库,如Tiny Jpeg Decoder,并查看jpeg解码函数中的主循环。在Tiny Jpeg Decoder的情况下,主循环调用decode_MCU,从那里修改。 :-)

如果你想减少一个非整数因子,你已经有很多工作要做,以使代码适用于非8x8 MCU,而加载更多。听起来很有趣。祝你好运。