Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задача: Кэширование изображения C++

990
20 марта 2009 года
Stalcer
137 / / 15.08.2004
Помогите, пожалуйста, с задачей кэширования изображения. Если есть идеи, буду очень признателен за комментарии или реализацию :)

Дано:
Монохромное изображение, превышающее объем ОП, формата BMP или PNG.
Объем ОП на тестовой машине 1Gb, размер изображения 75108x13883 px.

Требуется:
Программа для стабильного и достаточно быстрого просмотра данного изображения.
Возможности: масштабирование изображения (не кратное 2 в обе стороны) и обычный скролбар.


Тестовое изображение: http://dottedmag.net/images/a.png (~12Mb) качать, браузер не открывает так-же как и проводник Windows :)
открывает: фотошоп, IrfanView, GIMP, автокад
32K
21 марта 2009 года
Rififi
54 / / 04.06.2008
Цитата: Stalcer
Помогите, пожалуйста, с задачей кэширования изображения. Если есть идеи, буду очень признателен за комментарии или реализацию :)



преобразовывай JPEG в JTIP (JPEG Tiled Image Pyramid)

Цитата:
Tiling is used to divide a single image into two or more smaller subimages. Tiling allows easier buffering of the image data in memory, quicker random access of the image data on disk, and the storage of images larger than 64Kx64K samples in size. JPEG supports three types of tiling: simple, pyramidal, and composite.



В силу некоторых особенностей ТЗ, я использовал Pyramidal tiling. TIFF'ы размером 100k-150к пикселей оно переваривало нормально. Дальше сами файлы получались более 4Gb и возникали другие проблемы, решать которые на 32-битной платформе нецелесообразно. Тебя скорее всего это ограничение не коснется.

87
21 марта 2009 года
Kogrom
2.7K / / 02.02.2008
В стандартном c++ нет средств для решения подобных задач. Но, возможно, есть в Boost Gil:
http://www.boost.org/doc/libs/1_38_0/libs/gil/doc/index.html

Хотя я сам с этой библиотекой не работал. В приведенных на сайте примерах вводится файл, изменяется, сохраняется в новый. На счет вывода на экран - ничего не могу сказать.

Оффтопик: скоро будем прощать не только Оксотника, но и Леркина... хотя, возможно, дело тут в пятнице ;)
990
21 марта 2009 года
Stalcer
137 / / 15.08.2004
Цитата: Rififi
преобразовывай JPEG в JTIP (JPEG Tiled Image Pyramid)



Погуглил на эту тему и нашел опэнсаурс проект библиотеки, которая как раз реализует решение этой задачи http://www.vips.ecs.soton.ac.uk/index.php?title=VIPS , но как реально использовать ее в моем проекте понятия не имею. NIPS - готовое решение с интерфейсом, но больно избыточно, мне как раз нужно окно VIEW этой программы :)

http://www.vips.ecs.soton.ac.uk/supported/7.16/win32/nip2-7.16.3.zip - с интерфейсом под NT
http://www.vips.ecs.soton.ac.uk/supported/7.16/nip2-7.16.4.tar.gz - собственно исходник

Компилируют они под виндой с помощью http://mingw.org/

990
23 марта 2009 года
Stalcer
137 / / 15.08.2004
Нашел реализацию подгрузки и вывода изображений практически всех форматов с помощью GDI+. Но мое тестовое изображение естественно не открывает. Как переписать функцию вывода, чтоб изображение кэшировалось?

Собственно вывод:
Код:
void CDemoView::OnDraw(CDC* pDC)
{
   CDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   Image* pImage = pDoc->GetImage();
   if(NULL != pImage)
   {
      Graphics graphics(*pDC);
      Status status = graphics.GetLastStatus();
      if(Ok == status)
      {
         graphics.DrawImage(pImage, 0, 0,
                            pImage->GetWidth(), pImage->GetHeight());
      }
   }
}

СТАТЬЯ
ИСХОДНИК ПРОЕКТА
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог