CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 6 of 6

Hybrid View

  1. #1
    Join Date
    May 2014
    Posts
    205

    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: */

  2. #2
    Join Date
    May 2013
    Posts
    26

    Re: Why I cannot open tiff file?

    Using linux style forward slashes "/" instead of windows style "\\" back slashes?

  3. #3
    Join Date
    May 2014
    Posts
    205

    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?

  4. #4
    2kaud's Avatar
    2kaud is offline Super Moderator Power Poster
    Join Date
    Dec 2012
    Location
    England
    Posts
    7,824

    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)

  5. #5
    Join Date
    May 2014
    Posts
    205

    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:

  6. #6
    Join Date
    Apr 1999
    Posts
    27,449

    Re: Why I cannot open tiff file?

    Quote Originally Posted by crazy boy View Post
    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
  •  





Click Here to Expand Forum to Full Width

Featured