GDI+ и многостраничные картинки
От: AlexAlex2  
Дата: 05.01.07 14:36
Оценка:
Нужно создать в памяти Gdiplus::Bitmap(), с заданным кол-вом страниц.
Конструкторы Bitmap позволяют создавать только одностраничные Bitmap.
Очевидно, это можно как-то сделать, ведь создает же сам GDI+
многостраничные Bitmap из файлов GIF/TIFF.

Может кто знает внутренний формат Gdiplus::GpImage ? Было бы прекрасно...

Буду очень признателен за советы.
Re: GDI+ и многостраничные картинки
От: romson  
Дата: 06.01.07 13:25
Оценка:
А разве бывают многостраничные битмапы? Вроде как, многостраничность — это свойство формата файла, а не битмапа. Следовательно, нужно просто сохранить все страницы в памяти в виде, например, многостраничного TIFF'а, а затем открыть его, примерно вот так:
CreateStreamOnHGlobal
Image::Save
Image::SaveAdd
Image::SaveAdd
...
Image::FromStream
Re[2]: GDI+ и многостраничные картинки
От: AlexAlex2  
Дата: 06.01.07 16:14
Оценка:
Здравствуйте, romson, Вы писали:

R>А разве бывают многостраничные битмапы? Вроде как, многостраничность — это свойство формата файла, а не битмапа. Следовательно, нужно просто сохранить все страницы в памяти в виде, например, многостраничного TIFF'а, а затем открыть его, примерно вот так:

R>
R>CreateStreamOnHGlobal
R>Image::Save
R>Image::SaveAdd
R>Image::SaveAdd
R>...
R>Image::FromStream
R>

Бывают многостраничные Gdiplus::Bitmap. То есть он может содержать в себе несколько разных страниц (и разрешений тоже).
типа вот этого
Bitmap fourFrames(L"FourFrames.tif");
fourFrames.GetFrameCount(...) == 4

Моя прога хукает основные вызовы gdiplus.dll, подменяя собой загрузку форматов файлов. То есть расширяет его возможности за счет кол-ва загружаемых форматов.
Если я буду перезаписывать картинку в памяти в TIFF, это будет J.O.P.A.

Повторюсь еще раз:
я делаю Bitmap вот етим конструктором
Bitmap(INT width,INT height,INT stride,PixelFormat format,BYTE *scan0);
естественно, он получается одностраничным. Необходимо как-то добавить к нему еще страницы
Re[3]: GDI+ и многостраничные картинки
От: romson  
Дата: 06.01.07 23:07
Оценка:
Здравствуйте, AlexAlex2, Вы писали:

AA>я делаю Bitmap вот етим конструктором

AA>Bitmap(INT width,INT height,INT stride,PixelFormat format,BYTE *scan0);
AA>естественно, он получается одностраничным. Необходимо как-то добавить к нему еще страницы

Что-то мне подсказывает, что без записи в файл у Вас ничего не получится. Потому как, скорее всего, все страницы не хранятся в памяти одновременно, и при каждом вызове Image::SelectActiveFrame нужная страница просто загружается из файла и распаковывается в один и тот же битмап. Ведь не зря же в MSDN написано:

When you call the Image::SelectActiveFrame method, all changes that you made to the previously active frame are discarded. If you want to retain changes that you make to a frame, call the Save method before you switch to a different frame.

Re[4]: GDI+ и многостраничные картинки
От: AlexAlex2  
Дата: 07.01.07 11:54
Оценка:
Здравствуйте, romson, Вы писали:

R>Здравствуйте, AlexAlex2, Вы писали:


AA>>я делаю Bitmap вот етим конструктором

AA>>Bitmap(INT width,INT height,INT stride,PixelFormat format,BYTE *scan0);
AA>>естественно, он получается одностраничным. Необходимо как-то добавить к нему еще страницы

R>Что-то мне подсказывает, что без записи в файл у Вас ничего не получится. Потому как, скорее всего, все страницы не хранятся в памяти одновременно, и при каждом вызове Image::SelectActiveFrame нужная страница просто загружается из файла и распаковывается в один и тот же битмап. Ведь не зря же в MSDN написано:


R>

When you call the Image::SelectActiveFrame method, all changes that you made to the previously active frame are discarded. If you want to retain changes that you make to a frame, call the Save method before you switch to a different frame.


Да, romson, пожалуй так оно и есть. Некоторые совершенно очевидные мысли иногда не приходят в голову, если
постоянно пользуешся другими средствами, чем GDI+

спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.