2009-12-14 2 views
1

Я бил головой об этом некоторое время безрезультатно.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 на все многоэкранное изображение, а не устанавливаю его только на субимажах, но это кажется прекрасным, пока я не хочу изменять ширину видового экрана относительно друг друга.

Я проверил значения глубины, которые анализируются и передаются, и они верны.

+0

«Практически индекс», что это значит? «Расположите их так, как они на самом деле существовали на земле», вы имеете в виду, что они будут накладываться друг на друга? – AnthonyWJones

+0

Извините за путаницу - в основном картина, забивающая солому в земле и вытаскивая ее - затем снимая ее. Это один образ. Затем засорьте солому обратно на землю и получите еще одну «Соломенную ценность» - это два изображения. Я хочу скомпоновать эти изображения поверх каждого из них с одной оговоркой - иногда солома не получает полной нагрузки, поэтому между двумя изображениями будет разрыв. –

+0

Отредактированный вопрос, чтобы уточнить используемые термины. –

ответ

0

Материал DeepZoom, и особенно Видовые экраны, всегда болит голова, когда я работаю с ним. Я не уверен, что могу ответить на ваш вопрос, кроме как указать вам в сторону того, что помогло мне это получить.

Один из других ресурсов, которые я нашел недавно, что я думаю, что это намного проще работать, чем глубокие инструменты масштабирования самих Eventr. Этот инструмент значительно упрощает создание и отображение снимков с большим увеличением.

+0

Оба эти ссылки действительно появились, как уже было показано, снова прошли через них, и из блога Хайме подумайте, что это может быть частью моей проблемы: «ViewpointOrigin on Subimages: они нормализованы относительно вида viewportWidth вашего субимажа, с которым вы имеете дело». - все еще не уверен, хотя, придется откопать обратно после обеда. –

+0

Да, мне пришлось масштабировать свое начало точки зрения по ширине субимажа, а не видимую ширину текущего элемента управления - поэтому удалили эту проблему сверху - нужно просто выровнять масштаб макета. –

+0

Отмечено это как ответ, так как ключ заключался в том, что цитата из блога jaime's re: параметры точки обзора относятся к каждому субимажу. Ширина видового экрана многоэкранного изображения просто служит модификатором для каждой индивидуальной ширины видоискателя каждого субимажа - в основном мне приходилось изменять свой желаемый вектор по отношению к ширине каждого мультискалевого изображения с шириной контейнера. Тьфу. Но теперь это работает, и спасибо за толкание в правильном направлении. –

Смежные вопросы