无法使用gdk_pixbuf_loader加载TIFF图像

时间:2016-02-07 10:57:36

标签: c image-processing tiff gdk gdkpixbuf

我等待将内存中的图像(jpegs和tiffs)加载到gdk_pixbuf_loader_write()中。我有样本/测试代码加载jpegs很好,但无法显示tiff图像。 tiff图像与其他观众(侏儒等眼睛)打开很好,所以tiff是有效的;我也使用imagemagick从jpeg创建tiffs,这些也无法在我的示例代码中加载/显示。

使用tiff图像在我的示例代码上运行strace,我可以看到gdkpixbuf加载器打开了ok:

In [12]: %%timeit                                 
df = pd.read_csv("in.csv")
ids = df.groupby(['FName', 'LName']).id.apply(list)
df.Usedid = df.apply(lambda x: int(ids[x.UsedFName, x.UsedLName][-1]), axis=1)
   ....: 
100 loops, best of 3: 5.27 ms per loop

In [13]: %%timeit                                 
df = pd.read_csv("in.csv")
d = dict(zip(((f, l) for f, l in zip(df["FName"], df["LName"])), df["id"]))
df["Usedid"] = [d[(f, l)] for f, l in zip(df["UsedFName"], df["UsedLName"])]
   ....: 

1000 loops, best of 3: 1.41 ms per loop

使用tiff文件时我需要处理哪些具体内容?样本测试程序如下。

open("/usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders.cache", O_RDONLY) = 7
...
open("/usr/lib64/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-tiff.so", O_RDONLY|O_CLOEXEC) = 7

1 个答案:

答案 0 :(得分:0)

我正在开发一个示例,演示我们的条形码扫描仪驱动程序的应用程序。所以我也遇到了这个问题。我设法解决了这个问题,在调用' gdk_pixbuf_loader_get_pixbuf'

之前关闭pixbuffer
gdk_pixbuf_loader_close(loader,&error);
GdkPixbuf* pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);

检查if (pixbuf == NULL ){以避免使用空指针崩溃也是个好主意。

在' tiff'你需要调用gdk_pixbuf_loader_close,否则它将无法正常工作。 当你关闭它时,你不能再使用相同的装载机。