Мне нужно специально загрузить изображение JPG, которое было сохранено как blob. GDI + позволяет очень легко получать изображения из файлов, но не из баз данных ...





Сначала загрузите свой блог в массив байтов, а затем используйте что-то вроде этого:
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;
}
Изначально я неправильно прочитал название и подумал, что вы ищете C#. Похоже, MemoryStream доступен и в C++: msdn.microsoft.com/en-us/library/…
Взгляните на 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;
}
Но с проверкой ошибок и т. д. (Здесь опущено, чтобы было понятнее)
Это то, что я получил за то, что не пытался его скомпилировать.
что эквивалент MemoryStream на C++?