我已经为此绞尽脑汁好一阵子了,但都没有结果。
我有一堆地质样本的图像,它们名义上是1500px宽,30000px长。一组典型的这些图像的编号从20到100。我已经使用DeepZoomTools.dll创建了这些图像的集合,并尝试使用它来布置图像。
所有图像最初加载时的ViewPort.Origin为0,ViewPort.Width为1(基本上是默认设置)。我在MultiScaleImage.ImageOpenSucceeded事件之后对它们进行迭代,并尝试根据一些额外的元数据对它们进行排列。
每个图像都有一个关联的深度(以米为单位的深度),我想根据该深度堆叠每个图像。(有时图像之间可能存在间隙,因此我必须根据顶部的深度值来定位每个图像)。(请参阅备注以了解其他解释)。
加载了一组图像后,我找到了图像本身的每米像素,如下所示:(必须将它们全部求和,因为它们不一定是连续的)
double sumImagePixelHeights = (from s in _imageData.Values select s.Height).Sum();
double sumImageDepthRanges = (from s in _imageData.Values select (s.BottomDepth - s.TopDepth)).Sum();
_actualPixelsPerMeter = sumImagePixelHeights / sumImageDepthRanges;现在,使用每米“全尺寸”图像的像素(深度以米为单位),我确定我实际想要显示的深度范围(y轴按深度缩放):
double desiredVisiblePixels = (_MaxVisibleY - _MinVisibleY)*_actualPixelsPerMeter;
mainImage.ViewportWidth = desiredVisiblePixels / mainImage.ActualHeight;这应该设置视口宽度,以便我显示深度范围所需的“原始图像像素”的数量,由于纵横比锁定而缩放显示的X范围。
然后,我遍历mainImage.SubImages集合中的图像,以根据所需的深度设置它们的原点。
for (int index = 0; index < mainImage.SubImages.Count; index++)
{
MultiScaleSubImage si = mainImage.SubImages[index];
ImageMetadata im = _imageData[index];
double xpnt = _actualPixelsPerMeter *im.TopDepth / (im.Width);
si.ViewportOrigin = new Point(0, -xpnt);
}问题是:
ViewportWidth计算是错误的-我的图像被缩放到它们应该是的~3倍(即,10m的“显示深度范围”显示3m的实际深度范围)
很明显,我的计算中有一些逻辑错误,但在检查之后,我就是看不到它。
我在整个多尺度图像上设置ViewportWidth,而不是仅在子图像上设置它,但只要我不想调整彼此之间的视口宽度,这似乎是可以的。
我检查了正在解析并传入的深度值,它们是正确的。
发布于 2009-12-15 00:45:18
DeepZoom的东西,尤其是视口,在我使用它的时候总是让我头疼。我不确定我能不能回答你的问题,只能告诉你是什么帮助我得到了它。
我最近发现的另一个资源是Eventr,我认为它比深度缩放工具本身更容易使用。该工具使得创建和显示深度缩放集合变得更加容易。
https://stackoverflow.com/questions/1901916
复制相似问题