Ir ao conteúdo
  • Cadastre-se
Cambalinho

Image: como salvar e ler 1 IStream?

Recommended Posts

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 :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×