⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readerwriterjp2.cpp

📁 最新osg包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        virtual ReadResult readImage(std::istream& fin,const Options* options) const        {            char c;            char * sdata;            long ssize;            std::vector<char> vdata;            while(!fin.eof())            {                fin.read(&c, 1);                vdata.push_back(c);            }            ssize = vdata.size();            sdata = &vdata[0];            jas_init();            jas_stream_t* in = jas_stream_memopen((char*)sdata, ssize);            char* opt = 0;            if(options && !options->getOptionString().empty())            {                opt = new char[options->getOptionString().size() + 1];                strcpy(opt, options->getOptionString().c_str());            }            jas_image_t* jimage = jas_image_decode(in, -1, opt); // last is the option string whatto put there?            if(opt) delete[] opt;                        if (!jimage) return ReadResult::FILE_NOT_HANDLED;             int internalFormat = jimage->numcmpts_;            int s = jas_image_width(jimage);            int t = jas_image_height(jimage);            int r = 1;            unsigned char* data = new unsigned char[internalFormat*s*t];            jas_stream_t* mem = jas_stream_memopen((char*)data, internalFormat*s*t);            putdata(mem, jimage, internalFormat);            jas_image_destroy(jimage);            jas_stream_close(in);            jas_image_clearfmts();            unsigned int pixelFormat =                internalFormat == 1 ? GL_LUMINANCE :                internalFormat == 2 ? GL_LUMINANCE_ALPHA :                internalFormat == 3 ? GL_RGB :                internalFormat == 4 ? GL_RGBA : (GLenum)-1;            unsigned int dataType = GL_UNSIGNED_BYTE;            Image* image = new Image();//            image->setFileName(fileName.c_str());            image->setImage(s,t,r,                internalFormat,                pixelFormat,                dataType,                data,//                osg::Image::USE_NEW_DELETE);                osg::Image::NO_DELETE);            notify(INFO) << "image read ok "<<s<<"  "<<t<< std::endl;            return image;        }        virtual WriteResult writeObject(const osg::Object& object,const std::string& file, const osgDB::ReaderWriter::Options* options) const        {            const osg::Image* image = dynamic_cast<const osg::Image*>(&object);            if (!image) return WriteResult::FILE_NOT_HANDLED;            return writeImage(*image,file,options);        }        virtual WriteResult writeObject(const osg::Object& object,std::ostream& fout,const Options* options) const        {            const osg::Image* image = dynamic_cast<const osg::Image*>(&object);            if (!image) return WriteResult::FILE_NOT_HANDLED;            return writeImage(*image,fout,options);        }        virtual WriteResult writeImage(const osg::Image &img,const std::string& fileName, const osgDB::ReaderWriter::Options* options) const        {            std::string ext = osgDB::getFileExtension(fileName);            if (!acceptsExtension(ext)) return WriteResult::FILE_NOT_HANDLED;                        jas_init();            jas_image_cmptparm_t cmptparms[4];            jas_image_cmptparm_t *cmptparm;            int internalFormat = osg::Image::computeNumComponents(img.getPixelFormat());            jas_stream_t* mem = jas_stream_memopen((char*)img.data(), internalFormat*img.s()*img.t());            /* Create an image of the correct size. */            jas_image_t* jimage;            int i;            for (i = 0, cmptparm = cmptparms; i < internalFormat; ++i, ++cmptparm) {                cmptparm->tlx = 0;                cmptparm->tly = 0;                cmptparm->hstep = 1;                cmptparm->vstep = 1;                cmptparm->width = img.s();                cmptparm->height = img.t();                cmptparm->prec = 8;                cmptparm->sgnd = 0;            }            if (!(jimage = jas_image_create(internalFormat, cmptparms, JAS_CLRSPC_UNKNOWN))) {                return WriteResult::ERROR_IN_WRITING_FILE;            }            if(internalFormat == 1)            {                jas_image_setclrspc(jimage, JAS_CLRSPC_GENGRAY);                jas_image_setcmpttype(jimage, 0, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_GRAY_Y));            }            else if(internalFormat == 2)            {                jas_image_setclrspc(jimage, JAS_CLRSPC_GENGRAY);                jas_image_setcmpttype(jimage, 0, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_GRAY_Y));                jas_image_setcmpttype(jimage, 1, JAS_IMAGE_CT_COLOR(JAS_IMAGE_CT_OPACITY));            }            else if(internalFormat == 3)            {                jas_image_setclrspc(jimage, JAS_CLRSPC_SRGB);                jas_image_setcmpttype(jimage, 0, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_R));                jas_image_setcmpttype(jimage, 1, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_G));                jas_image_setcmpttype(jimage, 2, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_B));            }            else if(internalFormat == 4)            {                jas_image_setclrspc(jimage, JAS_CLRSPC_SRGB);                jas_image_setcmpttype(jimage, 0, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_R));                jas_image_setcmpttype(jimage, 1, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_G));                jas_image_setcmpttype(jimage, 2, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_B));                jas_image_setcmpttype(jimage, 3, JAS_IMAGE_CT_COLOR(JAS_IMAGE_CT_OPACITY));            }            getdata(mem, jimage);            jas_stream_t* out = jas_stream_fopen(fileName.c_str(), "wb");            if (!out)                 return WriteResult::ERROR_IN_WRITING_FILE;            char* opt = 0;            if(options)            {                opt = new char[options->getOptionString().size() + 1];                strcpy(opt, options->getOptionString().c_str());            }            jas_image_encode(jimage, out, _fmt_jp2,  opt);            if(opt) delete[] opt;            jas_stream_flush(out);            jas_stream_close(out);            jas_image_destroy(jimage);            jas_image_clearfmts();            return WriteResult::FILE_SAVED;        }        WriteResult writeImage(const osg::Image& img, std::ostream& fout, const Options* options) const        {            jas_init();            jas_image_cmptparm_t cmptparms[4];            jas_image_cmptparm_t *cmptparm;            int internalFormat = osg::Image::computeNumComponents(img.getPixelFormat());            jas_stream_t* mem = jas_stream_memopen((char*)img.data(), internalFormat*img.s()*img.t());            /* Create an image of the correct size. */            jas_image_t* jimage;            int i;            for (i = 0, cmptparm = cmptparms; i < internalFormat; ++i, ++cmptparm) {                cmptparm->tlx = 0;                cmptparm->tly = 0;                cmptparm->hstep = 1;                cmptparm->vstep = 1;                cmptparm->width = img.s();                cmptparm->height = img.t();                cmptparm->prec = 8;                cmptparm->sgnd = 0;            }            if (!(jimage = jas_image_create(internalFormat, cmptparms, JAS_CLRSPC_UNKNOWN))) {                return WriteResult::ERROR_IN_WRITING_FILE;            }            if(internalFormat == 1)            {                jas_image_setclrspc(jimage, JAS_CLRSPC_SGRAY);                jas_image_setcmpttype(jimage, 0, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_GRAY_Y));            }            else if(internalFormat == 2)            {                jas_image_setclrspc(jimage, JAS_CLRSPC_SGRAY);                jas_image_setcmpttype(jimage, 0, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_GRAY_Y));                jas_image_setcmpttype(jimage, 1, JAS_IMAGE_CT_COLOR(JAS_IMAGE_CT_OPACITY));            }            else if(internalFormat == 3)            {                jas_image_setclrspc(jimage, JAS_CLRSPC_SRGB);                jas_image_setcmpttype(jimage, 0, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_R));                jas_image_setcmpttype(jimage, 1, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_G));                jas_image_setcmpttype(jimage, 2, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_B));            }            else if(internalFormat == 4)            {                jas_image_setclrspc(jimage, JAS_CLRSPC_SRGB);                jas_image_setcmpttype(jimage, 0, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_R));                jas_image_setcmpttype(jimage, 1, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_G));                jas_image_setcmpttype(jimage, 2, JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_B));                jas_image_setcmpttype(jimage, 3, JAS_IMAGE_CT_COLOR(JAS_IMAGE_CT_OPACITY));            }            getdata(mem, jimage);            jas_stream_t* out = jas_stream_memopen(0, 0);//            jas_stream_t* out = jas_stream_fopen(fileName.c_str(), "wb");            if (!out)                 return WriteResult::ERROR_IN_WRITING_FILE;            char* opt = 0;            if(options)            {                opt = new char[options->getOptionString().size() + 1];                strcpy(opt, options->getOptionString().c_str());            }                        jas_image_encode(jimage, out, _fmt_jp2,  opt);            if(opt) delete[] opt;            jas_stream_flush(out);            // now the encoded jp2 image resides in the out->buf_ member with size out->len_ we now need to stream it to a std::ostream            jas_stream_memobj_t* obj = (jas_stream_memobj_t*) out->obj_;            fout.write((char*)obj->buf_, obj->len_);            fout << std::flush;            jas_stream_close(out);            jas_image_destroy(jimage);            jas_image_clearfmts();            return WriteResult::FILE_SAVED;        }        int _fmt_jp2;};// now register with Registry to instantiate the above// reader/writer.REGISTER_OSGPLUGIN(jp2, ReaderWriterJP2)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -