Я бил головой об этом некоторое время безрезультатно.Silverlight MultiScaleImage/SubImage Топология логики точки зрения вопрос
У меня есть куча изображений геологических образцов, которые номинально 1500px шириной на 30 000 пикселей. Типичный набор этих изображений будет составлять от 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;
Теперь с пикселями «полного размер» изображения на метр (глубины в единицах метров) определить, какую глубину диапазона я на самом деле хочу отобразить (ось у масштабируются в глубине):
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 раза, что они должны быть (т.е. «отображается диапазон глубины» 10м отображает фактическую глубину диапазон 3м)
Я, очевидно, ошибаюсь в своих расчетах, но после этого я просто не вижу этого.
Я устанавливаю ViewportWidth на все многоэкранное изображение, а не устанавливаю его только на субимажах, но это кажется прекрасным, пока я не хочу изменять ширину видового экрана относительно друг друга.
Я проверил значения глубины, которые анализируются и передаются, и они верны.
«Практически индекс», что это значит? «Расположите их так, как они на самом деле существовали на земле», вы имеете в виду, что они будут накладываться друг на друга? – AnthonyWJones
Извините за путаницу - в основном картина, забивающая солому в земле и вытаскивая ее - затем снимая ее. Это один образ. Затем засорьте солому обратно на землю и получите еще одну «Соломенную ценность» - это два изображения. Я хочу скомпоновать эти изображения поверх каждого из них с одной оговоркой - иногда солома не получает полной нагрузки, поэтому между двумя изображениями будет разрыв. –
Отредактированный вопрос, чтобы уточнить используемые термины. –