我一直在研究有关遥感图像处理和图像序列循环的项目。每个生成的图像(JPEG或PNG格式)大约有8000 * 4000像素。我们的用户通常希望一次基于感兴趣的区域循环图像序列(超过50个图像)。因此,我必须根据用户的可视化客户端大小从每个图像中提取所需的查看区域。例如,如果用户当前的客户端视图是640 * 480,我将必须根据当前的x(列)和y(行)坐标从每个原始图像中找到640 * 480数据块的大小,并重新映射到客户端视图。当用户通过鼠标拖动平移到另一个查看区域时,我们的程序必须尽快从每个原始图像中重新加载区域数据。
我知道JPEG库和PNG库都没有一些内置的数据块读取例程,例如 long ReadRectangle(long x0,long y0,long x1,long y1,char * RectData); long ReadInaRectangle(long x0,long y0,short width,short height,char * RectData);
内置的JPEG解压缩器缺乏这种功能。我知道JPEG2000格式有解压缩图像特定区域的规定。我对JEPG并不完全确定。
有人建议我使用CreateFileMapping,MapViewOfFile和CreateDIBSection来提交映射到视图的文件映射的字节数。与简单的平面二进制图像格式(如* .raw,*。img和* .bmp)不同,JPEG的Blob不仅包含图像数据,还包含复杂的JPG标题。因此,将数据视图块映射到JPEG文件中并不容易。
有人建议我使用图像平铺或图像金字塔技术来生成子图像,就像流行的,图像可视化(谷歌地球等)和GIS应用程序(WebGIS等)一样。
我该如何解决这个问题?
感谢您的帮助。
金利来答案 0 :(得分:3)
如果区域坐标是8的倍数,那么来自ijg的JPEG库可能可以帮助您加载部分JPEG图像。
你想要:
链接几乎涵盖了前两个步骤。第四个是很微不足道的(你可以使用IJG接口色度抽样和缩放的类型 - 本质上采样 - 很容易通过使用类似OpenCV或滚动自己的代码来实现)。 第三一个是我尚未尝试过的,但听起来有可能。
答案 1 :(得分:0)
使用gd library很容易。 LibGD是一个开源代码库,用于由程序员动态创建图像。