Я пытаюсь скопировать некоторые двоичные данные из моего экземпляра IStream (поскольку Gdiplus :: Image сохраняет только в производные от IStream объекты или путь к файлу) в указатель на символ, из которого я могу просто прочитать, зная выделенный двоичный файл Размер и доступ к указателю.
Мой класс выглядит следующим образом:
Upload::Upload(Gdiplus::Bitmap* bitmap, CLSID clsEncoderId)
{
int result;
STATSTG statResult;
result = CreateStreamOnHGlobal(0, TRUE, &m_hBufferStream);
if (result != S_OK)
MessageBoxW(NULL, _T("Upload::Upload(): Could not create stream"), _T("Point"), MB_OK | MB_ICONERROR);
else
{
if (bitmap->Save(m_hBufferStream, &clsEncoderId, NULL) != Gdiplus::Ok)
MessageBoxW(NULL, _T("Upload::Upload(): Could not save() image"), _T("Point"), MB_OK | MB_ICONERROR);
}
if (m_hBufferStream->Stat(&statResult, STATFLAG_NONAME) != S_OK)
return;
Gdiplus::Image test(m_hBufferStream, TRUE);
test.Save(_T("hejs.png"), &clsEncoderId, NULL);
m_iSize = statResult.cbSize.LowPart;
}
char* Upload::GetBinaryData()
{
char* buffer = (char*)malloc(m_iSize);
ULONG size = 0;
m_hBufferStream->Read(buffer, m_iSize, &size);
return buffer;
}
В моей функции, которая обрабатывает экземпляр Upload, я делаю это:
char* pBuffer = upload->GetBinaryData();
buffer.write(pBuffer, upload->GetSize());
Но сохраненная память неправильна (хотя странно, что это похоже на шаблон).
Что я делаю не так?
Заранее спасибо.
P.S .:
Тестовый экземпляр Image успешно сохраняется в файл после чтения из m_hBufferStream.