1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
/* $Id: ascii_tag.c,v 1.7 2008/04/15 13:32:12 dron Exp $ */
/* Copyright (c) 2004, Andrey Kiselev
* 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: */
|