有谁知道如何在C或C ++中打开图像,特别是jpg到字节数组?任何形式的帮助都表示赞赏。
谢谢!
答案 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)
答案 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;
}