Народ — хотелось бы обсудить тему того, как в фотошопе устроен ИХ менеджер памяти. Пока что у меня не получается придумать аналог, который работал бы с такойже скоростью. Есть какие-нибудь соображения?
Re: Photoshop
От:
Аноним
Дата:
24.09.04 15:01
Оценка:
Здравствуйте, Acid the Programmer, Вы писали:
ATP>Народ — хотелось бы обсудить тему того, как в фотошопе устроен ИХ менеджер памяти. Пока что у меня не получается придумать аналог, который работал бы с такойже скоростью. Есть какие-нибудь соображения?
Слова-то какие умные... "Менеджер памяти"...
Работа через ScanLines позволяет добиться отличных результатов, сопоставимыми по скорости работы с фотошоповской
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Acid the Programmer, Вы писали:
ATP>>Народ — хотелось бы обсудить тему того, как в фотошопе устроен ИХ менеджер памяти. Пока что у меня не получается придумать аналог, который работал бы с такойже скоростью. Есть какие-нибудь соображения?
А>Слова-то какие умные... "Менеджер памяти"... А>Работа через ScanLines позволяет добиться отличных результатов, сопоставимыми по скорости работы с фотошоповской
Именно менеджер, т.к есть собственный файл подкачки и память вродибы организована тайлами. Интересно у Photoshopа используется линейная модель при работе с изображением или нет?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Acid the Programmer, Вы писали:
ATP>>Народ — хотелось бы обсудить тему того, как в фотошопе устроен ИХ менеджер памяти. Пока что у меня не получается придумать аналог, который работал бы с такойже скоростью. Есть какие-нибудь соображения?
А>Слова-то какие умные... "Менеджер памяти"... А>Работа через ScanLines позволяет добиться отличных результатов, сопоставимыми по скорости работы с фотошоповской
ScanLine — это хорошо, но он не решает проблемы загрузки/отображения/редактирования файлов в пару гигабайт... Если картинки сравнительно небольшие — то все замечательно.
Re[3]: Photoshop
От:
Аноним
Дата:
27.09.04 07:41
Оценка:
Здравствуйте, Reunion, Вы писали:
R>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Acid the Programmer, Вы писали:
ATP>>>Народ — хотелось бы обсудить тему того, как в фотошопе устроен ИХ менеджер памяти. Пока что у меня не получается придумать аналог, который работал бы с такойже скоростью. Есть какие-нибудь соображения?
А>>Слова-то какие умные... "Менеджер памяти"... А>>Работа через ScanLines позволяет добиться отличных результатов, сопоставимыми по скорости работы с фотошоповской
R>ScanLine — это хорошо, но он не решает проблемы загрузки/отображения/редактирования файлов в пару гигабайт... Если картинки сравнительно небольшие — то все замечательно.
Ах, вот о чём речь.
Я видел эту тему в книге Дарахвеидзе П.Г. и Маркова Е.П. "Программирование в Delphi 5".
Там есть глава, где описана работа с графическими файлами объёмом до нескольких террабайт(!).
А>Ах, вот о чём речь. А>Я видел эту тему в книге Дарахвеидзе П.Г. и Маркова Е.П. "Программирование в Delphi 5". А>Там есть глава, где описана работа с графическими файлами объёмом до нескольких террабайт(!).
Ну а можно в двух словах, что там написано на эту тему?
И еще вопрос: Что понимается под термином ScanLine? Может я знаю, но незнал что это именно так называется...
Re[5]: Photoshop
От:
Аноним
Дата:
27.09.04 08:45
Оценка:
Здравствуйте, Acid the Programmer, Вы писали:
А>>Ах, вот о чём речь. А>>Я видел эту тему в книге Дарахвелидзе П.Г. и Маркова Е.П. "Программирование в Delphi 5". А>>Там есть глава, где описана работа с графическими файлами объёмом до нескольких террабайт(!).
ATP>Ну а можно в двух словах, что там написано на эту тему? ATP>И еще вопрос: Что понимается под термином ScanLine? Может я знаю, но незнал что это именно так называется...
ScanLines — одноимённый массив байт, в кототых хранится картинка. Доступ к пискселям происходит непосредственно, а не через тормозную канву (Canvas)
Re[5]: Photoshop
От:
Аноним
Дата:
27.09.04 08:46
Оценка:
Здравствуйте, Acid the Programmer, Вы писали:
А>>Ах, вот о чём речь. А>>Я видел эту тему в книге Дарахвелидзе П.Г. и Маркова Е.П. "Программирование в Delphi 5". А>>Там есть глава, где описана работа с графическими файлами объёмом до нескольких террабайт(!).
ATP>Ну а можно в двух словах, что там написано на эту тему? ATP>И еще вопрос: Что понимается под термином ScanLine? Может я знаю, но незнал что это именно так называется...
...в двух словах описать не могу, т.к. книга лежит дома, а я сейчас на работе.
Поищи, может в сети есть где-то эта книга или статья из неё
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Acid the Programmer, Вы писали:
А>>>Ах, вот о чём речь. А>>>Я видел эту тему в книге Дарахвелидзе П.Г. и Маркова Е.П. "Программирование в Delphi 5". А>>>Там есть глава, где описана работа с графическими файлами объёмом до нескольких террабайт(!).
ATP>>Ну а можно в двух словах, что там написано на эту тему? ATP>>И еще вопрос: Что понимается под термином ScanLine? Может я знаю, но незнал что это именно так называется...
А>...в двух словах описать не могу, т.к. книга лежит дома, а я сейчас на работе. А>Поищи, может в сети есть где-то эта книга или статья из неё
Ну понятно все про ScanLine..... Photoshop конечно работает не так. Пойзучав немного, я пришел к выводу, что его менеджер памяти реализован по Тайлам (квадратам NxM) и память под них он выделяет по мере необходимости. Но вот вопрос: можно ли Тайловую организацию памяти обьединить с линейной (например с помощью структурных исключений)?
Здравствуйте, Аноним, Вы писали:
А>Ах, вот о чём речь. А>Я видел эту тему в книге Дарахвеидзе П.Г. и Маркова Е.П. "Программирование в Delphi 5". А>Там есть глава, где описана работа с графическими файлами объёмом до нескольких террабайт(!).
Если бы ещё эти советы были практически применимы..
Речь там шла всего-лишь о проецировании файла с картинкой в память..
Но такой способ с фотошоповским менеджером и рядом не лежал..
Здравствуйте, Dimonka, Вы писали:
D>Здравствуйте, Аноним, Вы писали:
А>>Ах, вот о чём речь. А>>Я видел эту тему в книге Дарахвеидзе П.Г. и Маркова Е.П. "Программирование в Delphi 5". А>>Там есть глава, где описана работа с графическими файлами объёмом до нескольких террабайт(!).
D>Если бы ещё эти советы были практически применимы..
D>Речь там шла всего-лишь о проецировании файла с картинкой в память.. D>Но такой способ с фотошоповским менеджером и рядом не лежал..
Не... ну это совсем не интересно. Для таких методов не нужно книжки читать.
Ну неужели никому не приходилось работать с картинками размером 15000х10000 например ?
ну ты правильно говоришь про тайлы
а что тебе мешает их реализовать?
бери за основу виды организации страничной памяти ОС (т.н. стратегии управления страницами) и вперёд
Здравствуйте, LM, Вы писали:
LM>ну ты правильно говоришь про тайлы LM>а что тебе мешает их реализовать? LM>бери за основу виды организации страничной памяти ОС (т.н. стратегии управления страницами) и вперёд
Мешает пока то, что у меня в мозгу никак не смешивается линейная структура памяти с тайловой. Ведь я так понимаю, что я не могу веделить меньше 4КБ, т.к. работа ведется по страницам. Получается что я не могу выделить отдельную строку тайла, а могу только сразу несколько строк, да и в соседних тайлах память под строки тоже автоматически выделится. Как быть в таком случае?
рисунок разбиваешь на квадратные тайлы.
у каждого тайла есть различные характеристики, среди которых позиция в оригиальной картинке, высота и ширина изображения в тайле (т.к. может быть частичное заполнение тайла), флаг загруженности, атрибуты для стратегии управления паматью (зависит от самой стратегии).
а с тайлами уже работаешь как с маленькими изображениями
придётся переопределить основные функции рисования и выводы изображений (чтобы, к примеру, линии они автоматически рисовали через несколько тайлов) — а иначе никак, принципиально.
Здравствуйте, LM, Вы писали:
LM>рисунок разбиваешь на квадратные тайлы. LM>у каждого тайла есть различные характеристики, среди которых позиция в оригиальной картинке, высота и ширина изображения в тайле (т.к. может быть частичное заполнение тайла), флаг загруженности, атрибуты для стратегии управления паматью (зависит от самой стратегии). LM>а с тайлами уже работаешь как с маленькими изображениями LM>придётся переопределить основные функции рисования и выводы изображений (чтобы, к примеру, линии они автоматически рисовали через несколько тайлов) — а иначе никак, принципиально.
Неуверен, что у Photoshopa именно так все и устроено Дело в том, что основную головную боль вносят не функции рисования примитивов, т.к точка, линие и т.д, а фильтры изображений. При такой организации очень неудобно писать филтры и обработки т.к:
1. Мы не имеем линейной организации памяти, а как известно максимальная скорось достигается имеено в этом случае.
2. Мы ловим все глюки связанные с граничными эффектами (т.е. многие фильтры Фотошопа не могут быть написаны для каждого тайла в отдельности)
Здравствуйте, Acid the Programmer, Вы писали:
ATP>Народ — хотелось бы обсудить тему того, как в фотошопе устроен ИХ менеджер памяти. Пока что у меня не получается придумать аналог, который работал бы с такойже скоростью. Есть какие-нибудь соображения?
Помимо тайлов Photoshop строит ещё пирамиды различных уровней детализации для быстрого отображения с раззличным масштабом. Для не очень больших картинок (10000х10000) можео попробовать использовать file mapping.
Рекомендую также посмотреть исходнки GIMP -там вроде также всё сделано через тайлы.
Здравствуйте, Fed, Вы писали:
Fed>Здравствуйте, Acid the Programmer, Вы писали:
ATP>>Народ — хотелось бы обсудить тему того, как в фотошопе устроен ИХ менеджер памяти. Пока что у меня не получается придумать аналог, который работал бы с такойже скоростью. Есть какие-нибудь соображения?
Fed>Помимо тайлов Photoshop строит ещё пирамиды различных уровней детализации для быстрого отображения с раззличным масштабом. Для не очень больших картинок (10000х10000) можео попробовать использовать file mapping.
Fed>Рекомендую также посмотреть исходнки GIMP -там вроде также всё сделано через тайлы.
GIMP — смотрел. По скорости и оптимизации GIMP не в какое сравнение не идет с Фотошопом и работает в несколько раз тормознее. Одним словом Open Source — сами для себя делали. И так сойдет...
Здравствуйте, LM, Вы писали:
LM>для фильтров не надо ничего мудрить: основные тормоза при работе с большими изображениями — отрисовка LM>для фильтров делаешь "в лоб"
Погодите, погодите... Как это фильтры в лоб? Чтобы делать в лоб, его надо загрузить в оперативку. А как в 512 мег загрузить 1500 мег? Или есть другов "в лоб"?
не...
ну тут прям недавно про проецируемые в память файлы говорили... вот их и надо использовать.
и, к тому же, это зачем фильтру надо сразу всю картинку? это должен быть фильтр, для которого изменение пикселя или небольшой группы пикселей основывается на информации обо *всех* остальных пикселях — это что за фильтр такой?