Skip to content

Help! #112

@wangmuzhi126

Description

@wangmuzhi126

using the following code i can got a tif picture but i can't open it .

using (Tiff input = Tiff.Open(@"C:\Users\11370\Desktop\2024-09-13-14-05-16\RES\sti.tif", "r"))
{
input.SetDirectory(0);
int width = input.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
int height = input.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
int tileWidth = input.GetField(TiffTag.TILEWIDTH)[0].ToInt();
int tileLentgh = input.GetField(TiffTag.TILELENGTH)[0].ToInt();

            int samplesPerPixel = input.GetField(TiffTag.SAMPLESPERPIXEL)[0].ToInt();
            int bitsPerSample = input.GetField(TiffTag.BITSPERSAMPLE)[0].ToInt();
            int photo = input.GetField(TiffTag.PHOTOMETRIC)[0].ToInt();

            int tiles = 0;
            int tileSize = input.TileSize();
            byte[][] buffer = new byte[tileSize][];


            for (int y = 0; y < height; y += tileLentgh)
            {
                for (int x = 0; x < width; x += tileWidth)
                {
                    buffer[tiles] = new byte[tileSize];
                    input.ReadTile(buffer[tiles], 0, x, y, 0, 0);
                    tiles++;
                }
            }

            // writing
            using (Tiff output = Tiff.Open("output.tif", "w"))
            {

                output.SetField(TiffTag.TILEWIDTH, tileWidth);
                output.SetField(TiffTag.TILELENGTH, tileLentgh);
                output.SetField(TiffTag.TILEDEPTH, 1);

                output.SetField(TiffTag.SAMPLESPERPIXEL, samplesPerPixel);
                output.SetField(TiffTag.IMAGEWIDTH, width);
                output.SetField(TiffTag.IMAGELENGTH, height);
                output.SetField(TiffTag.BITSPERSAMPLE, bitsPerSample);
                //output.SetField(TiffTag.ROWSPERSTRIP, output.DefaultStripSize(0));
                output.SetField(TiffTag.PHOTOMETRIC, photo);
                output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);

                int c = 0;

                for (int y = 0; y < height; y += tileLentgh)
                {
                    for (int x = 0; x < width; x += tileWidth)
                    {
                        output.WriteTile(buffer[c], x, y, 0, 0);
                        c++;
                    }
                }
            }
        }
        System.Diagnostics.Process.Start("output.tif");

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions