Ir ao conteúdo
  • Cadastre-se

Image: como salvar e ler 1 IStream?


Cambalinho

Posts recomendados

ando a alguns dias a tentar resolver 1 problema que nao consigo encontrar resultados :(

é pena esta materia nao estão simplicada na internet :(

eu estou a subscrever o std::ostream& operator << e std::istream& operator >> para puder salvar\ler a Image num ficheiro. para isso tenho de usar as IStreams. mas nao estou a obter resultados :(

eis o actual codigo:

friend std::ostream& operator << (std::ostream& lhs, const image& rhs)    {        //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        if(rhs.img->Save(pIStream, &pngClsid, &encoderParameters) != 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;    }    friend std::istream& operator >> (std::istream& lhs, image& rhs)    {        //getting IStream size:        int streamsize;        lhs.read(reinterpret_cast<char*>(&streamsize), sizeof(streamsize));        IStream* pIStream = nullptr;        // Create stream with 0 size        HGLOBAL hg= ::GlobalAlloc(GMEM_MOVEABLE,streamsize);        GlobalLock(hg);        lhs.read(reinterpret_cast<char*>(&hg),sizeof(streamsize));        GlobalUnlock(hg);        if(CreateStreamOnHGlobal(&hg, TRUE, (LPSTREAM*)&pIStream)!=S_OK)            DebugText("error on creating an empty IStream");        //reading IStream on Image class:        if(rhs.img->FromStream(pIStream,FALSE)!=S_OK)            DebugText("error reading stream to Image");        //realease resources:        pIStream->Release();        GlobalFree(hg);        return lhs;    }

só o FromStream me dá o erro :(

(DebugText() é 1 funçao minha para criar 1 forma de Debug sobre os erros)

mas o que estou a fazer de errado? nem consigo perceber se escrever correctamente no ficheiro :(

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...