Преобразовать изображение в пригодный массив байтов в C? - PullRequest
3 голосов
/ 06 апреля 2010

Кто-нибудь знает, как открыть изображение, в частности, JPG, в байтовый массив в C или C ++? Любая форма помощи приветствуется.

Спасибо!

Ответы [ 6 ]

2 голосов
/ 06 апреля 2010

Библиотека ImageMagick также может сделать это, хотя часто она предоставляет достаточно функций манипулирования изображениями, которые позволяют выполнять множество задач без необходимости преобразования изображения в байтовый массив и обработки его самостоятельно.

1 голос
/ 06 апреля 2010

Проверьте исходный код для wxImage в wxWidgets GUI Framework . Скорее всего, вас заинтересует дистрибутив * nix.

Другой альтернативой является библиотека GNU Jpeg.

1 голос
/ 06 апреля 2010

Вы можете попробовать Библиотека изображений DevIL Я использовал ее только в отношении связанных с OpenGL вещей, но она также функционирует как простая библиотека загрузки изображений.

0 голосов
/ 15 ноября 2013

Вот как я бы это сделал, используя метод GDIPlus Bitmap.LockBits , определенный в заголовке GdiPlusBitmap.h:

    Gdiplus::BitmapData bitmapData;
    Gdiplus::Rect rect(0, 0, bitmap.GetWidth(), bitmap.GetHeight());

    //get the bitmap data
    if(Gdiplus::Ok == bitmap.LockBits(
                        &rect, //A rectangle structure that specifies the portion of the Bitmap to lock.
                        Gdiplus::ImageLockModeRead | Gdiplus::ImageLockModeWrite, //ImageLockMode values that specifies the access level (read/write) for the Bitmap.            
                        bitmap.GetPixelFormat(),// PixelFormat values that specifies the data format of the Bitmap.
                        &bitmapData //BitmapData that will contain the information about the lock operation.
                        ))
    {
         //get the lenght of the bitmap data in bytes
         int len = bitmapData.Height * std::abs(bitmapData.Stride);

         BYTE* buffer = new BYTE[len];
         memcpy(bitmapData.Scan0, buffer, len);//copy it to an array of BYTEs

         //... 

         //cleanup
         pBitmapImageRot.UnlockBits(&bitmapData);       
         delete []buffer;
    }
0 голосов
/ 06 апреля 2010

OpenCV также может сделать это.

http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/index.html

поиск: «Доступ к элементам изображения»

0 голосов
/ 06 апреля 2010

Мои ученики используют netpbm для представления изображений, поскольку они поставляются с удобной библиотекой C, но вы также можете помещать изображения в текстовую форму, создавать их вручную и т. Приятно то, что вы можете конвертировать все виды изображений, не только JPEG, в формат PBM, используя инструменты командной строки Unix. Инструмент djpeg доступен в нескольких местах, включая JPEG Club . Студенты с относительно небольшим опытом могут написать несколько довольно сложных программ, используя этот формат.

...