Мне нужно специально загрузить изображение JPG, которое было сохранено как blob. GDI + позволяет очень легко получать изображения из файлов, но не из баз данных ...
Как загрузить и сохранить изображение из базы данных SQL Server с помощью GDI + и C ++?
Ответы (2)
Взгляните на Image :: Image (IStream *, BOOL ). Это принимает указатель на COM-объект, реализующий интерфейс IStream. Вы можете получить один из них, выделив некоторую глобальную память с помощью 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;
}
Но с проверкой ошибок и т. Д. (Здесь опущено, чтобы было понятнее)
person
Eclipse
schedule
10.10.2008
Это то, что я получил за то, что не пытался его скомпилировать.
- person Eclipse; 11.10.2008
Сначала загрузите свой блог в массив байтов, а затем используйте что-то вроде этого:
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;
}
person
Jason Kealey
schedule
10.10.2008
что эквивалент MemoryStream на C ++?
- person djeidot; 10.10.2008
Изначально я неправильно прочитал название и подумал, что вы ищете C #. Похоже, MemoryStream также доступен на C ++: msdn.microsoft.com/en-us/library/
- person Jason Kealey; 10.10.2008