Нужно в ListView показать картинки из файлов *.jpg. Для этого необходимо предварительно заполнить этими картинками ImageList. А функция ImageList_Add требует HBITMAP. Как его можно получить? Подскажите, пожалуйста, я уже 3 дня мучаюсь, ничего не получается.
Здравствуйте, Regen, Вы писали:
R>Нужно в ListView показать картинки из файлов *.jpg. Для этого необходимо предварительно заполнить этими картинками ImageList. А функция ImageList_Add требует HBITMAP. Как его можно получить? Подскажите, пожалуйста, я уже 3 дня мучаюсь, ничего не получается.
Пишите свою функцию считывания файла и распаковки в память,
а потом CreateDiBitmap.
Здравствуйте, 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-а стопудово.
Здравствуйте, 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. Вот принтерных — навалом. Но нужен как раз экранный.
Павел.
Здравствуйте, Блудов Павел, Вы писали:
БП>Я еще не встречал экранный драйвер, поддерживающий BI_JPEG. Вот принтерных — навалом. Но нужен как раз экранный.
Не знал, спасибо.
Ну тогда остается либо рукопашная декомпрессия, как уже писали, либо заменить SetDIBitsToDevice в моем варианте на OleLoadPicturePath и IPicture::Render.