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

📄 agg_platform_support.cpp

📁 gnash 在pc和嵌入式下开发需要的源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                break;            }                   }        unsigned i = platform_support::max_images;        while(i--)        {            if(m_specific->m_buf_img[i])             {                delete [] m_specific->m_buf_img[i];            }        }        delete [] m_specific->m_buf_window;        m_specific->m_ximg_window->data = 0;        XDestroyImage(m_specific->m_ximg_window);        XFreeGC(m_specific->m_display, m_specific->m_gc);        XDestroyWindow(m_specific->m_display, m_specific->m_window);        XCloseDisplay(m_specific->m_display);                return 0;    }    //------------------------------------------------------------------------    const char* platform_support::img_ext() const { return ".ppm"; }    //------------------------------------------------------------------------    const char* platform_support::full_file_name(const char* file_name)    {        return file_name;    }    //------------------------------------------------------------------------    bool platform_support::load_img(unsigned idx, const char* file)    {        if(idx < max_images)        {            char buf[1024];            strcpy(buf, file);            int len = strlen(buf);            if(len < 4 || strcasecmp(buf + len - 4, ".ppm") != 0)            {                strcat(buf, ".ppm");            }                        FILE* fd = fopen(buf, "rb");            if(fd == 0) return false;            if((len = fread(buf, 1, 1022, fd)) == 0)            {                fclose(fd);                return false;            }            buf[len] = 0;                        if(buf[0] != 'P' && buf[1] != '6')            {                fclose(fd);                return false;            }                        char* ptr = buf + 2;                        while(*ptr && !isdigit(*ptr)) ptr++;            if(*ptr == 0)            {                fclose(fd);                return false;            }                        unsigned width = atoi(ptr);            if(width == 0 || width > 4096)            {                fclose(fd);                return false;            }            while(*ptr && isdigit(*ptr)) ptr++;            while(*ptr && !isdigit(*ptr)) ptr++;            if(*ptr == 0)            {                fclose(fd);                return false;            }            unsigned height = atoi(ptr);            if(height == 0 || height > 4096)            {                fclose(fd);                return false;            }            while(*ptr && isdigit(*ptr)) ptr++;            while(*ptr && !isdigit(*ptr)) ptr++;            if(atoi(ptr) != 255)            {                fclose(fd);                return false;            }            while(*ptr && isdigit(*ptr)) ptr++;            if(*ptr == 0)            {                fclose(fd);                return false;            }            ptr++;            fseek(fd, long(ptr - buf), SEEK_SET);                        create_img(idx, width, height);            bool ret = true;                        if(m_format == pix_format_rgb24)            {                fread(m_specific->m_buf_img[idx], 1, width * height * 3, fd);            }            else            {                unsigned char* buf_img = new unsigned char [width * height * 3];                rendering_buffer rbuf_img;                rbuf_img.attach(buf_img,                                width,                                height,                                m_flip_y ?                                  -width * 3 :                                   width * 3);                                fread(buf_img, 1, width * height * 3, fd);                                switch(m_format)                {                    case pix_format_rgb555:                        color_conv(m_rbuf_img+idx, &rbuf_img, color_conv_rgb24_to_rgb555());                        break;                                            case pix_format_rgb565:                        color_conv(m_rbuf_img+idx, &rbuf_img, color_conv_rgb24_to_rgb565());                        break;                                            case pix_format_bgr24:                        color_conv(m_rbuf_img+idx, &rbuf_img, color_conv_rgb24_to_bgr24());                        break;                                            case pix_format_rgba32:                        color_conv(m_rbuf_img+idx, &rbuf_img, color_conv_rgb24_to_rgba32());                        break;                                            case pix_format_argb32:                        color_conv(m_rbuf_img+idx, &rbuf_img, color_conv_rgb24_to_argb32());                        break;                                            case pix_format_bgra32:                        color_conv(m_rbuf_img+idx, &rbuf_img, color_conv_rgb24_to_bgra32());                        break;                                            case pix_format_abgr32:                        color_conv(m_rbuf_img+idx, &rbuf_img, color_conv_rgb24_to_abgr32());                        break;                                            default:                        ret = false;                }                delete [] buf_img;            }                                    fclose(fd);            return ret;        }        return false;    }    //------------------------------------------------------------------------    bool platform_support::save_img(unsigned idx, const char* file)    {        if(idx < max_images &&  rbuf_img(idx).buf())        {            char buf[1024];            strcpy(buf, file);            int len = strlen(buf);            if(len < 4 || strcasecmp(buf + len - 4, ".ppm") != 0)            {                strcat(buf, ".ppm");            }                        FILE* fd = fopen(buf, "wb");            if(fd == 0) return false;                        unsigned w = rbuf_img(idx).width();            unsigned h = rbuf_img(idx).height();                        fprintf(fd, "P6\n%d %d\n255\n", w, h);                            unsigned y;             unsigned char* tmp_buf = new unsigned char [w * 3];            for(y = 0; y < rbuf_img(idx).height(); y++)            {                const unsigned char* src = rbuf_img(idx).row_ptr(m_flip_y ? h - 1 - y : y);                switch(m_format)                {                    default: break;                    case pix_format_rgb555:                        color_conv_row(tmp_buf, src, w, color_conv_rgb555_to_rgb24());                        break;                                            case pix_format_rgb565:                        color_conv_row(tmp_buf, src, w, color_conv_rgb565_to_rgb24());                        break;                                            case pix_format_bgr24:                        color_conv_row(tmp_buf, src, w, color_conv_bgr24_to_rgb24());                        break;                                            case pix_format_rgb24:                        color_conv_row(tmp_buf, src, w, color_conv_rgb24_to_rgb24());                        break;                                           case pix_format_rgba32:                        color_conv_row(tmp_buf, src, w, color_conv_rgba32_to_rgb24());                        break;                                            case pix_format_argb32:                        color_conv_row(tmp_buf, src, w, color_conv_argb32_to_rgb24());                        break;                                            case pix_format_bgra32:                        color_conv_row(tmp_buf, src, w, color_conv_bgra32_to_rgb24());                        break;                                            case pix_format_abgr32:                        color_conv_row(tmp_buf, src, w, color_conv_abgr32_to_rgb24());                        break;                }                fwrite(tmp_buf, 1, w * 3, fd);            }            delete [] tmp_buf;            fclose(fd);            return true;        }        return false;    }    //------------------------------------------------------------------------    bool platform_support::create_img(unsigned idx, unsigned width, unsigned height)    {        if(idx < max_images)        {            if(width  == 0) width  = rbuf_window().width();            if(height == 0) height = rbuf_window().height();            delete [] m_specific->m_buf_img[idx];            m_specific->m_buf_img[idx] =                 new unsigned char[width * height * (m_bpp / 8)];            m_rbuf_img[idx].attach(m_specific->m_buf_img[idx],                                   width,                                   height,                                   m_flip_y ?                                        -width * (m_bpp / 8) :                                         width * (m_bpp / 8));            return true;        }        return false;    }    //------------------------------------------------------------------------    void platform_support::force_redraw()    {        m_specific->m_update_flag = true;    }    //------------------------------------------------------------------------    void platform_support::message(const char* msg)    {        fprintf(stderr, "%s\n", msg);    }    //------------------------------------------------------------------------    void platform_support::start_timer()    {        m_specific->m_sw_start = clock();    }    //------------------------------------------------------------------------    double platform_support::elapsed_time() const    {        clock_t stop = clock();        return double(stop - m_specific->m_sw_start) * 1000.0 / CLOCKS_PER_SEC;    }    //------------------------------------------------------------------------    void platform_support::on_init() {}    void platform_support::on_resize(int sx, int sy) {}    void platform_support::on_idle() {}    void platform_support::on_mouse_move(int x, int y, unsigned flags) {}    void platform_support::on_mouse_button_down(int x, int y, unsigned flags) {}    void platform_support::on_mouse_button_up(int x, int y, unsigned flags) {}    void platform_support::on_key(int x, int y, unsigned key, unsigned flags) {}    void platform_support::on_ctrl_change() {}    void platform_support::on_draw() {}    void platform_support::on_post_draw(void* raw_handler) {}}int agg_main(int argc, char* argv[]);int main(int argc, char* argv[]){    return agg_main(argc, argv);}

⌨️ 快捷键说明

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