Gtiplus :: Image가 IStream에서 파생 된 개체 또는 파일 경로에만 저장하기 때문에 IStream 인스턴스에서 일부 바이너리 데이터를 복사하려고합니다. 할당 된 바이너리 크기를 알면 읽을 수있는 char 포인터가됩니다 포인터에 액세스 할 수 있습니다.IStream 인스턴스의 데이터를 char 포인터로 읽으려면 어떻게해야합니까?
char* pBuffer = upload->GetBinaryData();
buffer.write(pBuffer, upload->GetSize());
그러나 저장 메모리가 잘못이 (이상한 그것이 비록 패턴처럼 보인다 : 나는 이렇게 업로드 인스턴스를 처리하는 내 기능에서
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;
}
다음과 같이
내 클래스입니다).
내가 뭘 잘못하고 있니?
미리 감사드립니다.
P.S. .: 테스트 Image-instance는 m_hBufferStream에서 읽은 후 파일에 성공적으로 저장됩니다.