如何使用GDI +和C++从SQL Server数据库加载和保存图像?

问题描述:

我需要专门加载保存为blob的JPG图像。 GDI +可以很容易地从数据库中检索文件的图像,但不...如何使用GDI +和C++从SQL Server数据库加载和保存图像?

Image::Image(IStream *, BOOL)看看。这需要一个指向实现IStream接口的COM对象的指针。您可以通过在GlobalAlloc中分配一些全局内存,然后在返回的句柄上调用CreateStreamOnHGlobal来获得其中的一种。它会是这个样子:

shared_ptr<Image> CreateImage(BYTE *blob, size_t blobSize) 
{ 
    HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE,blobSize); 
    BYTE *pImage = (BYTE*)::GlobalLock(hMem); 

    for (size_t iBlob = 0; iBlob < blobSize; ++iBlob) 
     pImage[iBlob] = blob[iBlob]; 

    ::GlobalUnlock(hMem); 

    CComPtr<IStream> spStream; 
    HRESULT hr = ::CreateStreamOnHGlobal(hMem,TRUE,&spStream); 

    shared_ptr<Image> image = new Image(spStream); 
    return image; 
} 

但随着错误检查等(此处省略使事情更清晰)

首先获取你的博客变成一个字节数组,然后使用这样的事情:

public static Image CreateImage(byte[] pict) 
{ 
    System.Drawing.Image img = null; 
    using (System.IO.MemoryStream stream = new System.IO.MemoryStream(pict)) { 
    img = System.Drawing.Image.FromStream(stream); 
    } 
    return img; 
} 
+0

什么的MemoryStream对C++的相同呢? – djeidot 2008-10-10 16:30:29

+0

我原本误读了标题,并认为你正在寻找C#。看来MemoryStream在C++中也是可用的:http://msdn.microsoft.com/en-us/library/system.io.memorystream(VS.71).aspx – 2008-10-10 16:43:52