View Issue Details

IDProjectCategoryView StatusLast Update
0001740Доработка карты (ZMP)Доработка файла картыpublic03-01-2013 09:52
ReporterTokarevVV Assigned ToTolik  
PrioritynormalSeverityminorReproducibilityhave not tried
Status resolvedResolutionfixed 
Summary0001740: Ошибка в Zoomify.zmp
DescriptionПрограмма для скачивания Zoomify содержит ошибки. Так в функции получения количества тайлов на данном уровне TilesAtZoom округление Val в большую сторону выполнено как 1 + Trunc(Val), что при целых значениях Val даёт не правильный результат. Для такого округления нужно использовать функцию Ceil.

Пример (гипотетический): картинка размером 76800 на 51200 имеет на максимальном уровне 60000 тайлов и последний тайл (299, 199) имет индекс 80045, что даёт 312 группу тайлов. Существующий скрипт даёт соответственно: 60501 тайлов, индекс 80659 и группу 315, что не верно.

Изменённый скрипт прилагается.

PS
Кроме того, желательно ввести в Паскаль-сктипт функции Ceil, Floor, Max, Min.
Tagszmp, паскальскрипт
Attached Files
GetUrlScript.txt (2,276 bytes)   
{-----------------------------------------------
�� ����� ImageProperties.xml
------------------------------------------------}
const
	m_nWidth = 76800;
	m_nHeight = 51200;

var
	i, zoom, nMaxZoom, nTileGroup :Longint;

{-----------------------------------------------
��������� floor �������
------------------------------------------------}
function Floor(v :Extended) :Extended;
begin
	Result := Trunc(v);
	if v < Result then Result := Result - 1.0;
end;

{-----------------------------------------------
��������� ceil �������
------------------------------------------------}
function Ceil(v :Extended) :Extended;
begin
	Result := Trunc(v);
	if v > Result then Result := Result + 1.0;
end;

{-----------------------------------------------
�������� ���������� ���������� Zoom'�
------------------------------------------------}
procedure GetMaxZoom();
var k, i :Longint;
begin
	k := m_nWidth;
	if m_nHeight > m_nWidth then k := m_nHeight;

	i := 0;
	while k > 256 do
	begin
		k := Trunc(k / 2);
		Inc(i);
	end;
	nMaxZoom := i;
end;

{-----------------------------------------------
�������� ��������� ������ �� ������ Zoom'�
------------------------------------------------}
function GetTilesAtZoom(zoom: Longint) :Longint;
var k :Extended;
begin
	k := 256.0 * IntPower(2, nMaxZoom - zoom);
	Result := Trunc(Ceil(m_nWidth / k) * Ceil(m_nHeight / k));
end;

{-----------------------------------------------
��������� ������ ���������� ������� Zoom'�
------------------------------------------------}
function GetTilesCount(nZoom: Longint) :Longint;
var i: Longint;
begin
	Result := 0;
	for i := 0 to nZoom - 1 do Result := Result + GetTilesAtZoom(i);
end;


{-----------------------------------------------
�������� URL �����
------------------------------------------------}
begin
	zoom := GetZ - 1;
	GetMaxZoom();
	nTileGroup :=  (GetX + GetY * Trunc(Ceil(m_nWidth / (256.0 * IntPower(2, nMaxZoom - zoom)))) + GetTilesCount(zoom)) div 256;
	ResultURL := GetURLBase + IntToStr(nTileGroup) + '/' + IntToStr(zoom) + '-' + IntToStr(GetX) + '-' + IntToStr(GetY) + '.jpg';
{	RequestHead := 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' + #13#10; }
end.

GetUrlScript.txt (2,276 bytes)   

Relationships

related to 0001745 resolvedzed SAS.Планета Добавить новые функции в PascalScript zmp 

Activities

Tolik

25-12-2012 13:10

manager   ~0010222

А существуют такие большие картинки? На реальных баг проявляется? Можете показать?

Tolik

25-12-2012 13:26

manager   ~0010223

Last edited: 25-12-2012 13:26

Впрочем, добавил исправленный скрипт в репозиторий.
Спасибо.
А по поводу новых функций откройте хотелку в разделе SAS.

Tolik

03-01-2013 08:45

manager   ~0010310

Дополнения от TokarevVV:
------------------------

1) Алгоритмы считывания Zoomify:
А1 — округление Val в большую сторону выполнено как Ceil(Val)
А2 — округление Val в большую сторону выполнено как 1 + Trunc(Val)

2) Для того, чтобы выявилось отличие алгоритма А1 от А2, линейные размеры картинки должны быть кратны размеру тайла.

С помощью программы, реализующей оба алгоритма, было проверено формирование номера группы последнего тайла для всех картинок, линейные размеры которых (в тайлах) Width и Height принадлежат диапазону от 1 до 100. Параметры картинок, у которых наблюдалось отличие номера группы, были сведены в таблицу (файл Pictures.rar).

Попытка найти в Интернете Zoomify-картинки необходимых размеров не увенчались успехом. Но, как говориться, «если гора не идёт к Магомету, то Магомет идёт к горе» — пришлось создать картинку размером 3584 на 3328 пиксель (первая картинка в таблице), всунуть в неё первое попавшееся фото (один из видов г. Сумы), затем Zoomify’цировать её и выложить в Интернет (http://williamtokarev.narod2.ru/TemplateWebPage.htm).

3) ZMP для считывания выложенной Zoomify-картинки:
по алгоритму А1 — файл ZoomifyA1.zmp.rar
по алгоритму А2 — файл ZoomifyA2.zmp.rar

4) По приведённым скриншотам (ScreenA1A2.jpg) видно, что:
скачивание последнего тайла (13, 12), а так же тайла (12, 12) на максимальном увеличении при использовании алгоритма А1 прошло успешно (0-я группа определена правильно). При использовании алгоритма А2 тайл не читается, так как программа пытается скачать его из 1-й группы тайлов, папки для которой не существует.

5) В файле params.txt нужно вставить:
TILERLEFT=0
TILERRIGHT=256
TILERTOP=0
TILERBOTTOM=256
для устранения растягивания нестандартных тайлов.

PS. На счёт больших картинок — вот монстры:
http://www.genomedu.net/escaners/kk/xaaa (56832 на 42112)
http://ana1.hal.kagoshima-u.ac.jp/slide/tiles/18/1 (104462 на 62812)
http://ana1.hal.kagoshima-u.ac.jp/slide/tiles/00/ips01 (125014 на 81314)

Issue History

Date Modified Username Field Change
25-12-2012 12:32 TokarevVV New Issue
25-12-2012 12:32 TokarevVV File Added: GetUrlScript.txt
25-12-2012 12:39 TokarevVV Tag Attached: паскальскрипт
25-12-2012 12:40 TokarevVV Tag Attached: zmp
25-12-2012 13:10 Tolik Note Added: 0010222
25-12-2012 13:10 Tolik Assigned To => Tolik
25-12-2012 13:10 Tolik Status new => feedback
25-12-2012 13:26 Tolik Note Added: 0010223
25-12-2012 13:26 Tolik Status feedback => resolved
25-12-2012 13:26 Tolik Resolution open => fixed
25-12-2012 13:26 Tolik Note Edited: 0010223
03-01-2013 08:45 Tolik Note Added: 0010310
03-01-2013 09:52 zed Relationship added related to 0001745