在C中将图像转换为可用的字节数组?

时间:2010-04-06 00:02:07

标签: c++ c image arrays byte

有谁知道如何在C或C ++中打开图像,特别是jpg到字节数组?任何形式的帮助都表示赞赏。

谢谢!

6 个答案:

答案 0 :(得分:2)

ImageMagick库也可以这样做,虽然它经常提供足够的图像处理函数,你可以做很多事情而不需要将图像转换为字节数组并自己处理它。

答案 1 :(得分:1)

你可以尝试DevIL Image Library我只使用它与OpenGL相关的东西,但它也只是一个普通的图像加载库。

答案 2 :(得分:1)

wxWidgets GUI Framework中查看wxImage的源代码。您很可能对* nix发行版感兴趣。

另一个替代方案是GNU Jpeg库。

答案 3 :(得分:0)

我让我的学生使用netpbm来表示图像,因为它附带了一个方便的C库,但您也可以将图像放入文本形式,手动创建,等等。这里的好处是你可以使用Unix方式的命令行工具将各种图像(而不仅仅是JPEG)转换为PBM格式。 djpeg工具可在多个位置使用,包括JPEG Club。经验相对较少的学生可以使用这种格式编写一些相当复杂的程序。

答案 4 :(得分:0)

OpenCV也可以这样做。

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

搜索:“访问图像元素”

答案 5 :(得分:0)

以下是使用标头GdiPlusBitmap.h中定义的GDIPlus Bitmap.LockBits方法进行的方法:

    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;
    }