Как создать ImageList из файлов *.jpg ?
От: Regen http://sv.iatp.org.ua
Дата: 09.05.04 04:25
Оценка:
Нужно в ListView показать картинки из файлов *.jpg. Для этого необходимо предварительно заполнить этими картинками ImageList. А функция ImageList_Add требует HBITMAP. Как его можно получить? Подскажите, пожалуйста, я уже 3 дня мучаюсь, ничего не получается.
Re: Как создать ImageList из файлов *.jpg ?
От: sva1509  
Дата: 09.05.04 09:48
Оценка:
Здравствуйте, Regen, Вы писали:

R>Нужно в ListView показать картинки из файлов *.jpg. Для этого необходимо предварительно заполнить этими картинками ImageList. А функция ImageList_Add требует HBITMAP. Как его можно получить? Подскажите, пожалуйста, я уже 3 дня мучаюсь, ничего не получается.


Пишите свою функцию считывания файла и распаковки в память,
а потом CreateDiBitmap.

С уважением Валерий.
Re: Как создать ImageList из файлов *.jpg ?
От: retalik www.airbandits.com/
Дата: 09.05.04 10:31
Оценка:
Здравствуйте, Regen, Вы писали:

R>Нужно в ListView показать картинки из файлов *.jpg. Для этого необходимо предварительно заполнить этими картинками ImageList. А функция ImageList_Add требует HBITMAP. Как его можно получить? Подскажите, пожалуйста, я уже 3 дня мучаюсь, ничего не получается.


Если поддержка Windows95 не нужна, то можно так:
  • загрузить в буфер содержимое *.jpg — файла;
  • создать структуру BITMAPINFO; в поле bmiHeader.biCompression поставить значение BI_JPEG;

    Дальше два ответвления (просто я не помню, поддерживает ли DIBSection компрессию Jpeg):

    1) либо просто вызываешь CreateDIBSection и полученный HBITMAP скармливаешь ImageList-у;
    2) либо создаешь битмап в памяти (CreateCompatibleDC, CreateCompatibleBitmap, SelectObject) и рисуешь туда свой Jpeg вызовом SetDIBitsToDevice. Вот этот битмап годится для ImageList-а стопудово.
  • Успехов,
    Виталий.
    Re[2]: Как создать ImageList из файлов *.jpg ?
    От: Блудов Павел Россия  
    Дата: 10.05.04 02:46
    Оценка: 18 (1)
    Здравствуйте, retalik, Вы писали:

    R>Если поддержка Windows95 не нужна, то можно так:

    R>
  • загрузить в буфер содержимое *.jpg — файла;
    R>
  • создать структуру BITMAPINFO; в поле bmiHeader.biCompression поставить значение BI_JPEG;

    Windows 98/Me, Windows 2000/XP: If the driver cannot support the JPEG or PNG file image passed to StretchDIBits, the function will fail and return GDI_ERROR. If failure does occur, the application must fall back on its own JPEG or PNG support to decompress the image into a bitmap, and then pass the bitmap to StretchDIBits.


    Я еще не встречал экранный драйвер, поддерживающий BI_JPEG. Вот принтерных — навалом. Но нужен как раз экранный.
    Павел.
    ... << RSDN@Home 1.1.3 beta 2 >>
  • Re[3]: Как создать ImageList из файлов *.jpg ?
    От: retalik www.airbandits.com/
    Дата: 10.05.04 18:21
    Оценка:
    Здравствуйте, Блудов Павел, Вы писали:

    БП>Я еще не встречал экранный драйвер, поддерживающий BI_JPEG. Вот принтерных — навалом. Но нужен как раз экранный.

    Не знал, спасибо.
    Ну тогда остается либо рукопашная декомпрессия, как уже писали, либо заменить SetDIBitsToDevice в моем варианте на OleLoadPicturePath и IPicture::Render.
    Успехов,
    Виталий.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.