欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何显示超大图像

程序员文章站 2022-07-05 08:43:51
1:做过图像显示的都知道,我们的图片大部分都是压缩过的,大部分为JPEG PNG BMP其中BMP格式是点阵形式,当图片翻译到内存之后无论压没压缩过都会变成BMP格式放进内存,在这个过程中,图片数据会几倍的增大,就比如JPEG,一张1M大小的JPEG格式的图片,翻译到内存可能就会变成7倍左右,也就是 ......

1:做过图像显示的都知道,我们的图片大部分都是压缩过的,大部分为JPEG PNG BMP其中BMP格式是点阵形式,当图片翻译到内存之后无论压没压缩过都会变成BMP格式放进内存,在这个过程中,图片数据会几倍的增大,就比如JPEG,一张1M大小的JPEG格式的图片,翻译到内存可能就会变成7倍左右,也就是7M会放在电脑内存里面,如果显示一张100M的JPEG图片,放进内存的话可能就会成为1G,好了如果是1G的图片呢,你的电脑内存还够用吗,可以,兄弟你可以说我电脑配置很高 达到16G内存条,,如果我要让你显示一张4G的图片呢,注意压缩过的,翻译到内存将近28G,你说我可以买一个28G的内存条,可以 ,兄弟你很有钱,哈哈哈,,如果你非要这样,这篇文章可以不用看了,跪拜土豪。那如果,我就想用一个2G的内存条显示这张压缩过还有4G的图片咋办,并且我还想生成这张图片呢,就比如说,我用显微镜拍一张切片,或则一个材料的纹理结构,那么虽然或许一个切片只有几个CM,但是显微镜人家分辨率高呀,看的细呀,用显微镜不就是想把图片放大个几千倍显示嘛,好了,问题来了,这样显微照相机可能要拍上千张图片,最后拼接成一张大图,然后放在电脑上显示,所有医生可以在电脑面前指指点点,是不是很方便,但是,同志,问题又来了,电脑内存不够,你也生成不了这么大的图片,生成的过程也是在电脑内存里面的,   好了,废话不多说了,看下面的演示吧。

1:准备一张54889x80315图片,当然不一定很多人会有这么大的图片,因为不知道这种技术的话,也没法生成这么大的图片。

如图:

如何显示超大图像

这张图片大小是54889x80315 这数据量大概有多大呢,我算了一下,大概是4.2041G,细心的网友可能会注意到,为什么显示的大小只有399M 呢,,哈哈哈,,这就是另一个技术了,想听的朋友们,会在后续的文章中,解密。

2:现在假设我们大家都有了这张图片了,下面我们想显示这张图片:首先,都会想到的,我用常规的浏览器试一下呗,我们就先用微软自带的图片浏览器,不要小瞧了这个windows图片查看器,亲测,他很智能,也很高效,千万不要以为他是个小程序,有时候我确实可以打开我的图片,即使我的图片有着我设计的特殊的数据结构和压缩形式,PS都不能打开我的图片,这家伙可以打开,所以在这里我还是很佩服这个图片浏览器。

如何显示超大图像

怎么样,哈哈哈,电脑内存不够吧,当然这个浏览器再吊,也只是傻大粗的野蛮式显示这张图片,当然内存不够用了。我在我朋友8G内存的电脑上也试了,一样死机!!!显示都显示不了了,还谈什么产生这张图片。

3:但是呢,我用自己写的软件,就可以打开这张图片,当然之前我也知道怎么产生这张图片,这是一个完整的流程;我的软件打开的效果是:

如何显示超大图像

来一张全局的图像效果:如下:

 

如何显示超大图像

其实把图片使劲缩小显示,图片的全局效果就长成这样。其实效果和你显示一张小图片没什么区别,流畅度,还有你可以做标记,什么的,,,,这些都是很多别的浏览器都具备的附加功能,但是当这些附加功能实现过程也是很痛苦的,为什么呢,就是因为这是一张超大图片,太大了,显示机制不一样,所以一切传统方法都得颠覆一下。

 

写的好累,这个项目,做了两年,就是为了完成这个软件,整个过程也比较痛苦,因为我是机械出身,现在还在学校读研究生,写代码的水平赶不上科班出身,这项技术整个完整流程,我打算慢慢写下来,从你如何产生一张目前为止最大的图片,让你图像拼接突破计算机限制,让你如何显示出来,如何平移,如何缩放,如何做标记等等,,太多了内容,,完整工程文件,包括编译好的库文件,我都有,压缩包解压就可以直接用,我用WPF编写的,其实WPF就和C#差不多,其实他两是兄弟。代码数量超过好几万。可是花费了我好大的心血。有兴趣的朋友可以百度一下Aperio,MOTIC这些企业,Aperio这个软件是和他的仪器配套出售的,据说一台仪器好几百万,功能就是显微镜扫描一个切片,然后打开浏览切片,主要是方便医生进行切片检查,同时减轻医生的工作量,要知道,没有这个仪器的话,医生可要用眼睛一个个看切片,成千上万的切片这是要累死医生呀!!!眼睛瞅瞎!!!Aperio他们做的扫描一张切片就几秒,然后就输入到电脑,用软件显示出来,这个软件核心功能,也就是我这个软件的功能。。。。。。。

整个软件涉及到的技术有,TIFF图像技术,四叉树,虚拟显示技术,虚拟容器技术,内存映射文件技术,图像金字塔技术等等剩下的就是什么,做标记,XML文档管理,缩略图显示,UI布局等等  真的很多。

有兴趣的朋友可以关注后续的文章,有需要这个软件的可以联系我,我的邮箱nanshanyi@sjtu.edu.cn,可以商量。今天就写到这。。。。。。