for write on file seems ok(i think, because i don't get errors):
Code:
friend std::ostream& operator << (std::ostream& lhs, const image& rhs)
{
STATSTG stats = {0};
//Create an empty IStream:
IStream* pIStream = nullptr;
HGLOBAL hg=NULL;
if(CreateStreamOnHGlobal(hg, FALSE, (LPSTREAM*)&pIStream)!=S_OK)
DebugText("error on creating an empty IStream");
//choose image format for save it on IStream:
// Get encoder class id for jpg compression
// for other compressions use
// image/bmp
// image/jpeg
// image/gif
// image/tiff
// image/png
CLSID pngClsid;
GetEncoderClsid(L"image/gif", &pngClsid);
// Setup encoder parameters
EncoderParameters encoderParameters;
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
// setup compression level
ULONG quality = 50;
encoderParameters.Parameter[0].Value = &quality;
// Save the image to the stream
Status SaveStatus = rhs.img->Save(pIStream, &pngClsid, &encoderParameters);
if(SaveStatus != Ok)
{
pIStream->Release();
DebugText("error on saving to IStream");
}
//getting the stream size:
int buffsize=GlobalSize(&hg);
char *pBuff = new char[buffsize];
ULONG ulBytesRead;
//Read the stream to pBuff
if(pIStream->Read(pBuff,buffsize, &ulBytesRead)!=S_OK)
DebugText("error on saving IStream to buffer");
//write the stream size on file
lhs << buffsize;
//write pBuff data on file
lhs << pBuff;
//clean resources
delete pBuff;
pIStream->Release();
return lhs;
}
but for read it:
Code:
friend std::istream& operator >> (std::istream& lhs, image& rhs)
{
STATSTG stats = {0};
IStream* pIStream = nullptr;
// Create stream with 0 size
if(CreateStreamOnHGlobal(nullptr, TRUE, (LPSTREAM*)&pIStream)!=S_OK)
DebugText("error on creating an empty IStream");
// Get encoder class id for jpg compression
// for other compressions use
// image/bmp
// image/jpeg
// image/gif
// image/tiff
// image/png
CLSID pngClsid;
GetEncoderClsid(L"image/gif", &pngClsid);
// Setup encoder parameters
EncoderParameters encoderParameters;
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
// setup compression level
ULONG quality = 50;
encoderParameters.Parameter[0].Value = &quality;
ULONG streamsize;
lhs >> streamsize;
char *pBuff = new char[streamsize];
lhs >> pBuff;
ULONG ulBytesRead;
if(pIStream->Write(pBuff, streamsize, &ulBytesRead)!=S_OK)
DebugText("error reading stream from a buffer");
if(rhs.img->FromStream(pIStream,FALSE)!=S_OK)
DebugText("error reading stream to Image");
pIStream->Release();
delete pBuff;
return lhs;
}
};
i get the error with FromStream(). what i'm doing wrong?