现在的位置: 首页 > 综合 > 正文

GrLoadImageFromBuffer和GrDrawImageFromBuffer的使用方法

2014年02月11日 ⁄ 综合 ⁄ 共 1337字 ⁄ 字号 评论关闭

        这两个API其实和GrLoadImageFromFile与GrDrawImageToFit有点异曲同工之妙,只是xxFromBuffer的两个API省去对文件I/O的操作,而直接从内存里操作罢了。换句话说,GrLoadImageFromBuffer完成的就是GrLoadImageFromFile的效果,而GrDrawImageFromBuffer完成就是GrDrawImageToFit与GrFreeImage的共同效果。

        GrLoadImageFromBuffer(void *buffer, int size, int flags)

        这里的*buffer是存放数据的地址,我们也从另外一个角度来理解为是我们通过open打开一个图像文件后得到一个fd,再把fd里的内容read到一块以buffer开始的内存区域中,这样我们就可以直接调用GrLoadImageFromBuffer函数,返回GR_IMAGE_ID。以下是code:

    int fd, id;
    char *path = "@@@";  /*三个@@@表示图片存放的绝对路径*/
    struct stat s;
    void *buffer = 0;
    fd = open(path, O_RDONLY);

    if (fd < 0 || fstat(fd, &s) < 0) {
        EPRINTF("Error: can't open image: %s/n", path);
        return 0;
    }
    buffer = malloc(s.st_size);

    if (!buffer) {
        EPRINTF("GdLoadImageFromFile: Couldn't malloc image %s/n", path);
        close(fd);
        return 0;
    }

    if (read(fd, buffer, s.st_size) != s.st_size) {
        EPRINTF("GdLoadImageFromFile: Couldn't load image %s/n", path);
        close(fd);
        return 0;
    }
    GR_IMAGE_ID loadimageid = GrLoadImageFromBuffer(buffer, s.st_size, 0);
    fprintf(stderr, "GR_IMAGE_ID is '%d'/n", loadimageid);

        GrDrawImageFromBuffer(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y, GR_SIZE width, GR_SIZE height, void *buffer, int size, int flags)

        知道了GrLoadImageFromBuffer的用法,也就对GrDrawImageFromBuffer不难上手了。因为*buffer的问题在GrLoadImageFromBuffer已经得到了解决,在GrDrawImageFromBuffer这里只需要直接调用便可在指定windows和指定坐标上画图。

抱歉!评论已关闭.