-
July 12th, 2014, 08:46 AM
#1
Why I cannot open tiff file?
I am trying libtiff library (I downloaded the source codes as part of SDL2, but I test it separately). There is a test file named ascii_tag.c.
There is a line
Code:
tif = TIFFOpen(filename, "r");
and it breaks here when I run the program. Filename is:
Code:
static const char filename[] = "images/ascii_test.tiff";
and the file exists on disk, because the program just create it and closed the file handler. The error I got:
Debug assertion failed ... program name ... File: (and this is the strange thing!) f:\dd\vctools\crt_bld\self_x86\crt\src\fstat64.c
line:64
Why it displays this path? I did not added this path to project so why it tries to call this file? I have installed VC in different location and running x86 32bit machine.
I already succeed to run test raw_decode.c where I used libtiff.lib and libjpeg.lib also here I used the libraries. I already succeed to open file there using
Code:
tif = TIFFOpen(srcfile,"r");
and srcfile = "./images/quad-tile.jpg.tiff".
Well I tried to use different path as "./images/ascii_test.tiff" but this also results in break. Where could be the problem that ascii_test.tiff cannot be opened?
Complete code:
Code:
/* $Id: ascii_tag.c,v 1.7 2008/04/15 13:32:12 dron Exp $ */
/* Copyright (c) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
* GNU */
/*
* TIFF Library
*
* Module to test ASCII tags read/write functions.
*/
#pragma once
#define _CRT_SECURE_NO_WARNINGS
//#pragma warning( disable : 4355 )
//#pragma warning( disable : 4101 )
#pragma warning( disable : 4099 )
#include "tif_config.h"
#include <stdio.h>
#include <string.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#include "tiffio.h"
static const char filename[] = "./images/ascii_test.tiff";
static const struct {
ttag_t tag;
const char *value;
} ascii_tags[] = {
{ TIFFTAG_DOCUMENTNAME, "Test TIFF image" },
{ TIFFTAG_IMAGEDESCRIPTION, "Temporary test image" },
{ TIFFTAG_MAKE, "This is not scanned image" },
{ TIFFTAG_MODEL, "No scanner" },
{ TIFFTAG_PAGENAME, "Test page" },
{ TIFFTAG_SOFTWARE, "Libtiff library" },
{ TIFFTAG_DATETIME, "2004:09:10 16:09:00" },
{ TIFFTAG_ARTIST, "Andrey V. Kiselev" },
{ TIFFTAG_HOSTCOMPUTER, "Debian GNU/Linux (Sarge)" },
{ TIFFTAG_TARGETPRINTER, "No printer" },
{ TIFFTAG_COPYRIGHT, "Copyright (c) 2004, Andrey Kiselev" },
{ TIFFTAG_FAXSUBADDRESS, "Fax subaddress" },
/* DGN tags */
{ TIFFTAG_UNIQUECAMERAMODEL, "No camera" },
{ TIFFTAG_CAMERASERIALNUMBER, "1234567890" }
};
#define NTAGS (sizeof (ascii_tags) / sizeof (ascii_tags[0]))
static const char ink_names[] = "Red\0Green\0Blue";
const int ink_names_size = 15;
int
main()
{
TIFF *tif;
size_t i;
unsigned char buf[] = { 0, 127, 255 };
char *value;
/* Test whether we can write tags. */
tif = TIFFOpen(filename, "w");
if (!tif) {
fprintf (stderr, "Can't create test TIFF file %s.\n", filename);
return 1;
}
if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, 1)) {
fprintf (stderr, "Can't set ImageWidth tag.\n");
goto failure;
}
if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, 1)) {
fprintf (stderr, "Can't set ImageLength tag.\n");
goto failure;
}
if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8)) {
fprintf (stderr, "Can't set BitsPerSample tag.\n");
goto failure;
}
if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, sizeof(buf))) {
fprintf (stderr, "Can't set SamplesPerPixel tag.\n");
goto failure;
}
if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG)) {
fprintf (stderr, "Can't set PlanarConfiguration tag.\n");
goto failure;
}
if (!TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB)) {
fprintf (stderr, "Can't set PhotometricInterpretation tag.\n");
goto failure;
}
for (i = 0; i < NTAGS; i++) {
if (!TIFFSetField(tif, ascii_tags[i].tag,
ascii_tags[i].value)) {
fprintf(stderr, "Can't set tag %lu.\n",
(unsigned long)ascii_tags[i].tag);
goto failure;
}
}
/* InkNames tag has special form, so we handle it separately. */
if (!TIFFSetField(tif, TIFFTAG_NUMBEROFINKS, 3)) {
fprintf (stderr, "Can't set tag %d (NUMBEROFINKS).\n",
TIFFTAG_NUMBEROFINKS);
goto failure;
}
if (!TIFFSetField(tif, TIFFTAG_INKNAMES, ink_names_size, ink_names)) {
fprintf (stderr, "Can't set tag %d (INKNAMES).\n",
TIFFTAG_INKNAMES);
goto failure;
}
/* Write dummy pixel data. */
if (!TIFFWriteScanline(tif, buf, 0, 0) < 0) {
fprintf (stderr, "Can't write image data.\n");
goto failure;
}
TIFFClose(tif);
/* Ok, now test whether we can read written values. */
tif = TIFFOpen(filename, "r");
if (!tif) {
fprintf (stderr, "Can't open test TIFF file %s.\n", filename);
return 1;
}
for (i = 0; i < NTAGS; i++) {
if (!TIFFGetField(tif, ascii_tags[i].tag, &value)
|| strcmp(value, ascii_tags[i].value)) {
fprintf(stderr, "Can't get tag %lu.\n",
(unsigned long)ascii_tags[i].tag);
goto failure;
}
}
if (!TIFFGetField(tif, TIFFTAG_INKNAMES, &value)
|| memcmp(value, ink_names, ink_names_size)) {
fprintf (stderr, "Can't get tag %d (INKNAMES).\n",
TIFFTAG_INKNAMES);
goto failure;
}
TIFFClose(tif);
/* All tests passed; delete file and exit with success status. */
unlink(filename);
return 0;
failure:
/*
* Something goes wrong; close file and return unsuccessful status.
* Do not remove the file for further manual investigation.
*/
TIFFClose(tif);
return 1;
}
/* vim: set ts=8 sts=8 sw=8 noet: */
-
July 13th, 2014, 09:25 PM
#2
Re: Why I cannot open tiff file?
Using linux style forward slashes "/" instead of windows style "\\" back slashes?
-
July 14th, 2014, 05:11 AM
#3
Re: Why I cannot open tiff file?
No problem with path. This is perfectly OK. The problem is in the method. Did you ever tried using tiff tags? To read or to write them by libtiff? The problem here is that the tag data which were written are not succeedly read (back). Maybe it was unsuccessfully write or somthing. But I can open the image in FastStone viewer (just no image data in it. I don't know. Should FastStone show some tag data in Information if they were succeedly written? I can view the binary data and I see that the tag descriptions are in the file. So why the method fails?
-
July 14th, 2014, 05:29 AM
#4
Re: Why I cannot open tiff file?
From the debugger, what is the assertion that failed?
For windows, the path should be
Code:
static const char filename[] = "images\\ascii_test.tiff";
See http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
The \\ are needed as \ is an escape char in c/c++ strings. See http://msdn.microsoft.com/en-us/library/h21280bw.aspx
All advice is offered in good faith only. All my code is tested (unless stated explicitly otherwise) with the latest version of Microsoft Visual Studio (using the supported features of the latest standard) and is offered as examples only - not as production quality. I cannot offer advice regarding any other c/c++ compiler/IDE or incompatibilities with VS. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/ and can be used without reference or acknowledgement. Also note that I only provide advice and guidance via the forums - and not via private messages!
C++23 Compiler: Microsoft VS2022 (17.6.5)
-
July 14th, 2014, 06:59 AM
#5
Re: Why I cannot open tiff file?
Then why in one code the command works and in the second code does not? The method obviously handles linux slashes to convert them to Windows slashes. Otherwise the method would failed in both codes.
Here is the assertion:
-
July 18th, 2014, 06:13 AM
#6
Re: Why I cannot open tiff file?
Originally Posted by crazy boy
Then why in one code the command works and in the second code does not?
Press Retry, look at the call stack, and inspect which functions were called that led up to the error. Since libTiff has full source code, you can easily see what is being done and the cause for the error.
Regards,
Paul McKenzie
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|