Загрузка графических файлов
От: vlademar  
Дата: 11.09.06 14:36
Оценка:
Скорее всего, этот вопрос уже задавался, но я не сумел найти на него ответ...

Как стандартными средствами Windows загрузить картинку в формате JPG/GIF/BMP из файла в массив? Ведь должна же быть какая-то встроенная библиотека...
Re: Загрузка графических файлов
От: cod3r_200  
Дата: 11.09.06 20:57
Оценка:
Здравствуйте, vlademar, Вы писали:

V>Скорее всего, этот вопрос уже задавался, но я не сумел найти на него ответ...


V>Как стандартными средствами Windows загрузить картинку в формате JPG/GIF/BMP из файла в массив? Ведь должна же быть какая-то встроенная библиотека...


Картинка представляет из себя такую схему:

|хеадер|данные|

тебе достаточно прочитать файл и дернуть данные и хедер.
mov eax, 0
call eax
Re: Загрузка графических файлов
От: jedi Мухосранск  
Дата: 11.09.06 21:08
Оценка:
Здравствуйте, vlademar, Вы писали:

V>Скорее всего, этот вопрос уже задавался, но я не сумел найти на него ответ...


V>Как стандартными средствами Windows загрузить картинку в формате JPG/GIF/BMP из файла в массив? Ведь должна же быть какая-то встроенная библиотека...



//////////////////////////////////////////////////////////////////////////
//
// Name:        Class to load bitmaps from resources.
// Version:        1.0
// Date:        16-8-2006
// Author:        masteryoda
//
//////////////////////////////////////////////////////////////////////////

#pragma once

namespace WTL
{
    class CResourceBitmap
    {
    public:
        static HBITMAP Load(ATL::_U_STRINGorID Type, ATL::_U_STRINGorID ID)
        {
            // TODO: may be need support for LoadEx & way to specify module
            //  to use resources from?
            CResource res;
            if (!res.Load(Type, ID))
                return NULL;

            // Create memory stream object an copy resource data to it.
            CComPtr<IStream> stream;
            HRESULT hr = ::CreateStreamOnHGlobal(NULL, TRUE, &stream);
            if (FAILED(hr))
                return NULL;
            
            DWORD size = res.GetSize();
            DWORD done;
            hr = stream->Write(res.Lock(), size, &done);
            if (FAILED(hr) || done != size)
                return NULL;

            LARGE_INTEGER pos = { 0, 0 };
            hr = stream->Seek(pos, STREAM_SEEK_SET, NULL);
            if (FAILED(hr))
                return NULL;

            // Load picture from memory.
            CComPtr<IPicture> picture;
            hr = ::OleLoadPicture(stream, 0, FALSE, IID_IPicture, (LPVOID*)&picture);
            if (FAILED(hr))
                return NULL;

            // Get HBITMAP and make copy of it.
            HBITMAP hBitmap;
            hr = picture->get_Handle((OLE_HANDLE*)&hBitmap);
            if (FAILED(hr))
                return NULL;

            return (HBITMAP)::CopyImage(hBitmap, IMAGE_BITMAP, 0, 0, 0);
        }
    };
}


Код использует WTL, но это легко убирается (если нужно). Загрузка из файла — аналогично, см функцию OleLoadPicturePath
Re[2]: Загрузка графических файлов
От: vlademar  
Дата: 12.09.06 03:33
Оценка:
Здравствуйте, cod3r_200, Вы писали:

_>Картинка представляет из себя такую схему:

_>|хеадер|данные|
_>тебе достаточно прочитать файл и дернуть данные и хедер.

К сожалению, это не совсем то. Если для BMP это сработает, то в GIF и JPG данные хранятся в сжатом виде, причём возможны вариации алгоритмов их пожатия. Мне же в итоге нужна "чистая" картинка...
Re[2]: Загрузка графических файлов
От: vlademar  
Дата: 12.09.06 03:37
Оценка:
Здравствуйте, jedi, Вы писали:


J>
J>


J>Код использует WTL, но это легко убирается (если нужно). Загрузка из файла — аналогично, см функцию OleLoadPicturePath


Спасибо... Ещё бы понять, что здесь используется... Будьте добры, поясните буквально в двух словах, что такое WTL?
Re[3]: Загрузка графических файлов
От: cod3r_200  
Дата: 12.09.06 04:16
Оценка:
Здравствуйте, vlademar, Вы писали:

V>К сожалению, это не совсем то. Если для BMP это сработает, то в GIF и JPG данные хранятся в сжатом виде, причём возможны вариации алгоритмов их пожатия. Мне же в итоге нужна "чистая" картинка...


о, я вспомнил. Я с помощью CImage из набора ATL загружал эти все форматы. Работает на ура. Такой вариант пойдет?
mov eax, 0
call eax
Re[3]: Загрузка графических файлов
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 12.09.06 04:58
Оценка:
Здравствуйте, vlademar, Вы писали:

V>Спасибо... Ещё бы понять, что здесь используется... Будьте добры, поясните буквально в двух словах, что такое WTL?


Windows Template Library
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий
Re[3]: Загрузка графических файлов
От: jedi Мухосранск  
Дата: 12.09.06 05:30
Оценка:
Здравствуйте, vlademar, Вы писали:

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



J>>
J>>


J>>Код использует WTL, но это легко убирается (если нужно). Загрузка из файла — аналогично, см функцию OleLoadPicturePath


V>Спасибо... Ещё бы понять, что здесь используется... Будьте добры, поясните буквально в двух словах, что такое WTL?


Из WTL испоьзуется только класс CResource, который легко заменяется на вызовы FindResource/LoadResource/LockResource.
А в общем, идея тут простая, используемое АПИ ты увидел — есть желание — дерзай. На конкретные вопросы отвечу.
Re: Загрузка графических файлов
От: _BOBAH_ Россия  
Дата: 12.09.06 05:55
Оценка:
Здравствуйте, vlademar, Вы писали:

V>Скорее всего, этот вопрос уже задавался, но я не сумел найти на него ответ...


V>Как стандартными средствами Windows загрузить картинку в формате JPG/GIF/BMP из файла в массив? Ведь должна же быть какая-то встроенная библиотека...


Иди по ссылке
Автор(ы): Павел Блудов
и будет тебе щастье .
_BOBAH_, ICQ# 306404574
Muzik:GLADIATOR 2 — The
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.