Anonymous | Login | Signup for a new account | 21-11-24 16:21 UTC |
All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
My View | View Issues | Change Log | Roadmap | Search |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0000368 | SAS.Планета | [All Projects] Хотелка | public | 11-01-2011 04:05 | 10-10-2012 11:49 | ||||
Reporter | Parasite | ||||||||
Assigned To | zed | ||||||||
Priority | none | Severity | tweak | Reproducibility | always | ||||
Status | closed | Resolution | fixed | ||||||
Platform | Windows | OS | XP | OS Version | SP3 | ||||
Product Version | 101206 | ||||||||
Target Version | 120808 | Fixed in Version | 120808 | ||||||
Summary | 0000368: Сведение в PNG с альфой | ||||||||
Description | Хотелось бы возможности сведения карт, использующих PNG-тайлы с альфа-каналом - в этот же самый PNG (с сохранением альфы). Спасибо. | ||||||||
Tags | gif, png, альфа-канал, прозрачность, склейка, экспорт | ||||||||
Attached Files | |||||||||
Notes | |
(0001146) Parasite (administrator) 10-03-2011 10:56 |
Он не дублирует, а дополняет. В 0000041 упор на сам факт сведения в PNG. В 0000368 - на сведение именно с прозрачностью, а не просто сохранение в данный формат файла как таковой. |
(0001159) gpsMax (manager) 10-03-2011 19:22 |
Альфой предполагается заливать те места, где нет тайлов? Или что с ней делать? |
(0001165) Parasite (administrator) 11-03-2011 03:54 |
Альфу предлагается просто оставлять на своем месте там, где она существует на исходных тайлах. Это касается GIF и PNG. Например, тот же гибрид гугля - гиф с прозрачностью (на сервере), при попытке его сведения текущим САСом - получаем белый фон вместо альфы. То же самое и с PNG. То есть, исходно существующий альфа-канал безвозвратно теряется и способов его восстановить из сведенного изображения - нет (кроме как опять обработать в фотошопе и ручками снова добавить прозрачность, то есть - пересоздать всю альфу ручками). Безусловная потеря САСом части информации с изображения не есть гуд, отсюда и хотелка. И да, как фичу - можно делать "альфа-дырки" на месте отсутствующих тайлов. Было бы приятно в фотошопе просто подложить бакграунд нужного цвета под всю карту, а не иметь сикес выделяя каждый пустой квадратик ручками и заливая краской...ведь оных на карте могут быть десятки, тысячи и даже миллионы... |
(0001166) Parasite (administrator) 11-03-2011 03:55 |
Так как фича касается и GIF(с альфой) в той же мере что и PNG - подредактировал название хотелки. |
(0001807) Parasite (administrator) 12-04-2011 08:27 |
Кстати, при проработке вопроса лучше всего было бы иметь ползунок "альфовости" этой альфы, то есть менять меру прозрачности (согласно обсужденного тут: http://sasgis.org/forum/viewtopic.php?f=2&t=1&p=19807#p19801) |
(0001810) vdemidov (manager) 12-04-2011 08:51 |
Ну и по какой формуле? Допустим на ползунке выбрано 63 из 255, то есть сильно прозрачное. А пиксел имеет прозрачность 195, тоесть почти не прозрачно. Что выводить в результат? |
(0001813) Parasite (administrator) 12-04-2011 09:33 |
>Ну и по какой формуле? Что выводить в результат? Из твоих цифирок выше: a=195 (пиксел) n=63 (ползунок) R=(a/100)*n, т.е. в результат выводить 123 (63% от значения 195). То есть - пиксел будет почти точно полупрозрачный, тогда как при исходных a=195 он был "сильно прозрачным" в исходнике. Ползунок на максимум (100%) даст нам родную картину альфы как она пришла с сервера. Такое положение предлагаю сделать дефолтным. Ползунок же на 0% - даст нам ноль альфы, т.е.полностью непрозрачные пиксели станут даже там, где они были прозрачными изначально (но RGB у них никто не отменял). То есть, слой визуально станет картой - без шаманства с ZMP. :) Расчет результирующего цвета идет по каноничным: http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D1%8C%D1%84%D0%B0-%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB , у нас лишь введется дополнительная "мера альфовости самой альфы" в процентах от user-defined ползунка. |
(0001814) Parasite (administrator) 12-04-2011 09:39 |
PS: >пиксел имеет прозрачность 195, тоесть почти не прозрачно Альфа - это обратная величина, и a=255 соответствует полной прозрачности, а a=0 - нативному цвету, декларируемому как "бакграунд" в хидере, что вкупе с разрешенной альфой дает прозрачность "баграунд-цвета". Соответственно, пиксел с a=195 -> это "сильно прозрачный" пиксел. |
(0001815) Tolik (manager) 12-04-2011 10:00 |
По этой формуле получается только "затемнение" (полу)прозрачных пикселей. Нужно также "осветление" непрозрачных. Т.е. чтобы альфу 0 можно было превратить (в пределе) в 255. |
(0001816) vdemidov (manager) 12-04-2011 10:02 edited on: 12-04-2011 10:02 |
Ну в САС везде используется альфа в виде однобайтового числа без знака. Так что 0 это полностью прозрачный, а 255 полностью непрозрачный. и 195 это таки очень непрозрачный. |
(0001824) Parasite (administrator) 12-04-2011 14:56 |
>Т.е. чтобы альфу 0 можно было превратить (в пределе) в 255 Каким образом, если начальных данных об альфе по данному пикселу НЕТ? Того самого значения 'a' из примера выше. Будем всегда умножать ползунок, каким бы большим он ни был - на ноль? Результат немного предсказуем. :) Это раз. А два - что будем делать с клиппингами? Любое положительное значение альфы, помноженное на растущий положительный ползунок, рано или поздно упрется в предел 1 байта (=255). А так как вся картинка у нас не однородная, а содержит какие-то плавные переходы по альфе - то практически сразу получаем ситуацию, когда более альфовые пиксели уже уперлись в 255, а более соседние можно бы и еще подвигать...То есть, придется либо "пересвечивать" (обрезать по 255) бОльшие пиксели и плевать на них с потерей их реальных значений, либо забыть про ползунок как только хоть один пиксель упрется в 255 чтобы не искажать всю картину (а там такие пиксели могут быть изначально с сервера, например полностью прозрачный участок). >и 195 это таки очень непрозрачный. Windows/Delphi feature? :( ------------ $tiletemp=Image::Magick->new(size=>255x255, magick=>'png', colorspace=>'RGBA'); $tiletemp->Read("xc:red"); $tiletemp->Set(alpha => 'transparent:255'); $tiletemp->Set('transparent-color' => 'red'); $tiletemp->Mogrify('transparent-color' => 'red'); $tiletemp->Write('test.png'); ------------ На выхлопе - "стеклянный" (прозрачный) тайл (#FF0000FF в к.пикселе). При "transparent:0" - красный непрозрачный тайл (#FF000000) PS: а мы значение альфы со значением a-маски не путаем? ;) В a-маске как раз обратное положение дел, #00 в маске = прозрачность в изображении (и соответственно #FF альфы, сохраняемый в файл). В любом случае, это некритично. Если в винде наоборот - ну и иметь это ввиду при расчетах, да и все. Имхо. |
(0001844) Tolik (manager) 13-04-2011 09:34 |
Умножать на ноль я как бы не предлагал. Если движок работает только на упрозрачнивание (0 - без изменений, 255 - полная прозрачность), то формула будет: R = a + n*(255 - a)/255 Это если линейно, а можно и что-то вроде гамма-коррекции замутить. |
(0001845) Parasite (administrator) 13-04-2011 10:27 |
>Умножать на ноль я как бы не предлагал. Однако вышеописанная ситуация - не исключена, не так ли? А клиппинги будут всегда, как только мы попробуем увеличивать уже оптимизированные (изначально лежащие на промежутке 0...255 при максимуме в 255) значения. >можно и что-то вроде гамма-коррекции замутить. Угу. Осталось найти того, кто это "что-то" будет мутить. :) |
(0004615) vdemidov (manager) 23-12-2011 15:07 |
А разве есть экспорт в GIF? Если нету, то нужно переименовать хотелку. |
(0004616) zed (manager) 23-12-2011 15:08 |
Изменил. |
(0005185) Parasite (administrator) 23-01-2012 09:18 edited on: 23-01-2012 09:19 |
>А разве есть экспорт в GIF? Если нету, то нужно переименовать хотелку. Смысл хотелки и заключался в том, чтобы этот экспорт _сделать_. С прозрачностью. из числа тех ГИФ-тайлов (ГИФ, внимание), которые приходят в программу. >Изменил. Ай малацца! А теперь меняй обратно, ибо 50% описания хотелки - это еще не вся описанная хотелка. :) |
(0005186) zed (manager) 23-01-2012 09:20 edited on: 23-01-2012 09:35 |
А нефиг распыляться в описании. Одна хотелка - одно пожелание. PNG и GIF это 2 хотелки. Хочешь ещё отдельно GIF - заводи новую. Тем более, что в истории правок тикета видно, что изначально хотелка была про PNG, а GIF был добавлен позже, как "однотипный". |
(0005188) Parasite (administrator) 23-01-2012 09:58 |
>PNG и GIF это 2 хотелки. Хотелка ОДНА - прекращение потерь альфа-канала там, где оно нужно. А я не виноват, что альфа у нас в сас приходит И с гифом, И с пнг. Будет приходить с чем-то третьим - я его тоже сюда допишу, ибо смысл хотелки останется всё в том же: возможность сохранять альфу в тот формат, _в каком оно и пришло_ (или в соседний, коль скоро их два). PS: Не вижу никакой особой технической сложности сохранять в ГИФ\ПНГ на выходе, коль скоро программой они токи давно и успешно принимаются на входе (то есть, как минимум декодер в проге есть, осталось включить и кодер в эти форматы). Подозреваю даже, что это делается даже той же либой что и другие общераспространенные и открытые форматы. |
(0005191) Tolik (manager) 23-01-2012 10:04 |
Parasite, зачем спорить, легче открыть новую хотелку. С png ведь уже работает, стало быть и хотелка д.б. resolved, а с гифом неизвестно когда будет. Для экспорта в png была присобачена libpng15.dll Для гифа она, очевидно, не подходит, надо отыскать (или написать) другую. |
(0005192) zed (manager) 23-01-2012 10:04 |
Нет, сохранение в GIF нужно прикручивать отдельно. Одно дело открыть/сохранить гифку 256*256 pix, а другое дело нормально сохранить снимок в большом разрешении (out of memory с jpeg'ом ещё помним?). Так что, не важно, с какими форматами САС умеет работать в режиме просмотра карт, склейка это совсем другая кухня и на каждый формат нужна своя хотелка. Дописывание в уже отработанную хотелку новых пожеланий лишено смысла. |
(0005198) Parasite (administrator) 23-01-2012 10:37 |
>легче открыть новую хотелку Кому легче? Лично мне легче было год назад написать костыль и сделать ту конкретную работу тогда, а не после даты назначения хотелки (назначенной на ..хх, а потом и на ..хххх). Хотелка тут осталась для тех, кому понадобится тот же функционал ровно в зоне моей же задачи (и посему редактирование\кастрацию оной я и не приветствую). У кого другие пожелания\другие понимания оной - ать-два в "Создать новый инцидент", а мне-то зачем? Что хотел - я описал выше на момент того запроса, а сейчас оно давно неактуально. Если сделают - будет решпект, нет - так нет, можно вообще закрыть. :) >нормально сохранить снимок в большом разрешении (out of memory с jpeg'ом ещё помним?) Ну ГИФ намного "легче" жпега (и даже ПНГ, если ничего не путаю). "Снимок в большом разрешении" и так создается САСом для сохранения в любой формат (перед кодированием собственно в файл). Задача, имхо, брать линию с того "большого разрешения"\переводить в индексн.цвета\писать в файл, повторить пока линии не кончатся. Чтобы на одной линии вылез "out of memory" - это еще надо очень постараться.... Это если безо всяких либ. Имхо, повторюсь - кодингу САСа я не советчик, но если бы делал я - я бы делал именно так. :) |
(0005199) zed (manager) 23-01-2012 10:58 |
>"Снимок в большом разрешении" и так создается САСом для сохранения в любой формат Неа, САСом создаётся только битмапка 256*TargetWidth. >Это если безо всяких либ. Без всяких либ, при сохранении что в jpeg, что в png, что в gif будет out of memory. Либы умеют клеить снимки без дикого использования памяти, а вот внутренний компонент - нет, он создаёт (пытается) в памяти целиком битмапку, а потом только её кодирует. |
(0005202) Parasite (administrator) 23-01-2012 12:10 |
>САСом создаётся только битмапка 256*TargetWidth. Вот в его пределах и плясать 256 раз, получая однопиксельные полоски и топча их в индекс и затем в out. Не? |
(0005204) zed (manager) 23-01-2012 14:30 |
Да. |
Users who viewed this issue | |
User List | Anonymous (3442x), Tolik (1x) |
Total Views | 3443 |
Last View | 21-11-2024 16:21 |
Issue History | |||
Date Modified | Username | Field | Change |
11-01-2011 04:05 | Parasite | New Issue | |
12-01-2011 18:13 | vdemidov | Status | new => acknowledged |
12-01-2011 18:13 | vdemidov | Product Version | => 101206 |
12-01-2011 18:13 | vdemidov | Target Version | => 29xxxx |
10-03-2011 09:41 | vdemidov | Relationship added | duplicate of 0000041 |
10-03-2011 09:41 | vdemidov | Target Version | 29xxxx => 40xxxx |
10-03-2011 10:56 | Parasite | Note Added: 0001146 | |
10-03-2011 19:21 | gpsMax | Tag Attached: png | |
10-03-2011 19:21 | gpsMax | Tag Attached: склейка | |
10-03-2011 19:21 | gpsMax | Tag Attached: экспорт | |
10-03-2011 19:22 | gpsMax | Note Added: 0001159 | |
11-03-2011 03:54 | Parasite | Note Added: 0001165 | |
11-03-2011 03:55 | Parasite | Note Added: 0001166 | |
11-03-2011 03:56 | Parasite | Summary | Сведение в PNG (с альфой) => Сведение в GIF\PNG с альфой |
11-03-2011 03:56 | Parasite | Description Updated | View Revisions |
11-03-2011 03:57 | Parasite | Relationship replaced | related to 0000041 |
11-03-2011 03:57 | Parasite | Tag Attached: gif | |
11-04-2011 07:11 | vdemidov | Status | acknowledged => confirmed |
11-04-2011 08:34 | gpsMax | Tag Attached: прозрачность | |
11-04-2011 08:35 | gpsMax | Tag Attached: альфа-канал | |
12-04-2011 08:27 | Parasite | Note Added: 0001807 | |
12-04-2011 08:51 | vdemidov | Note Added: 0001810 | |
12-04-2011 09:33 | Parasite | Note Added: 0001813 | |
12-04-2011 09:39 | Parasite | Note Added: 0001814 | |
12-04-2011 10:00 | Tolik | Note Added: 0001815 | |
12-04-2011 10:02 | vdemidov | Note Added: 0001816 | |
12-04-2011 10:02 | vdemidov | Note Edited: 0001816 | View Revisions |
12-04-2011 14:56 | Parasite | Note Added: 0001824 | |
13-04-2011 09:34 | Tolik | Note Added: 0001844 | |
13-04-2011 10:27 | Parasite | Note Added: 0001845 | |
06-06-2011 21:52 | gpsMax | Priority | normal => none |
22-12-2011 20:54 | zed | Status | confirmed => resolved |
22-12-2011 20:54 | zed | Fixed in Version | => 24xxxx |
22-12-2011 20:54 | zed | Resolution | open => fixed |
22-12-2011 20:54 | zed | Assigned To | => zed |
22-12-2011 20:55 | zed | Target Version | 40xxxx => 24xxxx |
23-12-2011 15:07 | vdemidov | Note Added: 0004615 | |
23-12-2011 15:08 | zed | Summary | Сведение в GIF\PNG с альфой => Сведение в PNG с альфой |
23-12-2011 15:08 | zed | Note Added: 0004616 | |
23-01-2012 08:26 | vdemidov | Fixed in Version | 24xxxx => 120808 |
23-01-2012 08:26 | vdemidov | Target Version | 24xxxx => 120808 |
23-01-2012 08:26 | vdemidov | Description Updated | View Revisions |
23-01-2012 09:18 | Parasite | Note Added: 0005185 | |
23-01-2012 09:19 | Parasite | Note Edited: 0005185 | View Revisions |
23-01-2012 09:20 | zed | Note Added: 0005186 | |
23-01-2012 09:35 | zed | Note Edited: 0005186 | View Revisions |
23-01-2012 09:58 | Parasite | Note Added: 0005188 | |
23-01-2012 10:04 | Tolik | Note Added: 0005191 | |
23-01-2012 10:04 | zed | Note Added: 0005192 | |
23-01-2012 10:37 | Parasite | Note Added: 0005198 | |
23-01-2012 10:58 | zed | Note Added: 0005199 | |
23-01-2012 12:10 | Parasite | Note Added: 0005202 | |
23-01-2012 14:30 | zed | Note Added: 0005204 | |
10-10-2012 11:49 | Tolik | Status | resolved => closed |
My View | View Issues | Change Log | Roadmap | Search |
Copyright © 2007 - 2024 SAS.Planet Team |