[giv] Fixed width and inverse bugs for binary tiff files.
- From: Dov Grobgeld <dov src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [giv] Fixed width and inverse bugs for binary tiff files.
- Date: Sat, 29 Dec 2012 18:42:31 +0000 (UTC)
commit a5ef2a6ff330fd89fa7d2a6aa388484157889b50
Author: Dov Grobgeld <dov grobgeld gmail com>
Date: Sun Nov 18 23:27:43 2012 +0200
Fixed width and inverse bugs for binary tiff files.
src/plugins/tiff.c | 23 ++++++++++++++++-------
1 files changed, 16 insertions(+), 7 deletions(-)
---
diff --git a/src/plugins/tiff.c b/src/plugins/tiff.c
index a33ec62..afd93bf 100644
--- a/src/plugins/tiff.c
+++ b/src/plugins/tiff.c
@@ -61,6 +61,8 @@ GivImage *giv_plugin_load_file(const char *filename,
gboolean has_colormap = FALSE;
uint16 *rmap, *gmap, *bmap;
uint16 pn=0, num_pages=0;
+ uint16 photometric;
+ gboolean do_invert = TRUE;
TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w);
TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h);
@@ -69,6 +71,7 @@ GivImage *giv_plugin_load_file(const char *filename,
TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &spp);
TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &sample_format);
TIFFGetField(tif, TIFFTAG_PAGENUMBER, &pn, &num_pages);
+ TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometric);
if (TIFFGetField(tif, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap))
has_colormap = TRUE;
@@ -114,8 +117,11 @@ GivImage *giv_plugin_load_file(const char *filename,
image_type = GIVIMAGE_U16;
else if (bps == 32)
image_type = GIVIMAGE_I32;
- else if (bps == 1)
+ else if (bps == 1) {
image_type = GIVIMAGE_U8;
+ if (photometric == PHOTOMETRIC_MINISBLACK)
+ do_invert = FALSE;
+ }
else {
printf("Unknown Tiff type!\n");
return NULL;
@@ -148,12 +154,15 @@ GivImage *giv_plugin_load_file(const char *filename,
}
}
else if (bps == 1) {
- for (col_idx=0; col_idx<w/8; col_idx++) {
- int bit_idx;
- for (bit_idx=0; bit_idx<8; bit_idx++) {
- *dst_ptr++ = 1-((*src_ptr >> (7-bit_idx))&1);
- }
- src_ptr++;
+ // This could certainly be speeded up
+ for (col_idx=0; col_idx<w; col_idx++) {
+ int bit_idx = col_idx % 8;
+ int b = ((*src_ptr >> (7-bit_idx))&1);
+ if (do_invert)
+ b = 1-b;
+ *dst_ptr++ = b;
+ if (bit_idx==7)
+ src_ptr++;
}
}
else {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]