BitMiracle.LibTiff.Classic.TiffRgbaImage.setorientation C# (CSharp) Method

setorientation() private method

private setorientation ( ) : int
return int
        private int setorientation()
        {
            switch (orientation)
            {
                case Orientation.TOPLEFT:
                case Orientation.LEFTTOP:
                    if (req_orientation == Orientation.TOPRIGHT || req_orientation == Orientation.RIGHTTOP)
                        return FLIP_HORIZONTALLY;
                    else if (req_orientation == Orientation.BOTRIGHT || req_orientation == Orientation.RIGHTBOT)
                        return FLIP_HORIZONTALLY | FLIP_VERTICALLY;
                    else if (req_orientation == Orientation.BOTLEFT || req_orientation == Orientation.LEFTBOT)
                        return FLIP_VERTICALLY;

                    return 0;

                case Orientation.TOPRIGHT:
                case Orientation.RIGHTTOP:
                    if (req_orientation == Orientation.TOPLEFT || req_orientation == Orientation.LEFTTOP)
                        return FLIP_HORIZONTALLY;
                    else if (req_orientation == Orientation.BOTRIGHT || req_orientation == Orientation.RIGHTBOT)
                        return FLIP_VERTICALLY;
                    else if (req_orientation == Orientation.BOTLEFT || req_orientation == Orientation.LEFTBOT)
                        return FLIP_HORIZONTALLY | FLIP_VERTICALLY;

                    return 0;

                case Orientation.BOTRIGHT:
                case Orientation.RIGHTBOT:
                    if (req_orientation == Orientation.TOPLEFT || req_orientation == Orientation.LEFTTOP)
                        return FLIP_HORIZONTALLY | FLIP_VERTICALLY;
                    else if (req_orientation == Orientation.TOPRIGHT || req_orientation == Orientation.RIGHTTOP)
                        return FLIP_VERTICALLY;
                    else if (req_orientation == Orientation.BOTLEFT || req_orientation == Orientation.LEFTBOT)
                        return FLIP_HORIZONTALLY;

                    return 0;

                case Orientation.BOTLEFT:
                case Orientation.LEFTBOT:
                    if (req_orientation == Orientation.TOPLEFT || req_orientation == Orientation.LEFTTOP)
                        return FLIP_VERTICALLY;
                    else if (req_orientation == Orientation.TOPRIGHT || req_orientation == Orientation.RIGHTTOP)
                        return FLIP_HORIZONTALLY | FLIP_VERTICALLY;
                    else if (req_orientation == Orientation.BOTRIGHT || req_orientation == Orientation.RIGHTBOT)
                        return FLIP_HORIZONTALLY;

                    return 0;
            }

            return 0;
        }

Usage Example

コード例 #1
0
        /// <summary>
        /// Get a strip-organized image with
        ///  SamplesPerPixel > 1
        ///  PlanarConfiguration separated
        /// We assume that all such images are RGB.
        /// </summary>
        private static bool gtStripSeparate(TiffRgbaImage img, int[] raster, int offset, int width, int height)
        {
            int stripsize = img.tif.StripSize();
            byte[] buf = new byte[(img.alpha != 0 ? 4 : 3) * stripsize];

            int p0 = 0;
            int p1 = p0 + stripsize;
            int p2 = p1 + stripsize;
            int pa = p2 + stripsize;
            pa = (img.alpha != 0 ? (p2 + stripsize) : -1);

            int flip = img.setorientation();
            int y;
            int rasterShift;
            if ((flip & FLIP_VERTICALLY) != 0)
            {
                y = height - 1;
                rasterShift = -(width + width);
            }
            else
            {
                y = 0;
                rasterShift = -(width - width);
            }

            FieldValue[] result = img.tif.GetFieldDefaulted(TiffTag.ROWSPERSTRIP);
            int rowsperstrip = result[0].ToInt();

            int scanline = img.tif.ScanlineSize();
            int bufferShift = (width < img.width ? img.width - width : 0);
            bool ret = true;
            for (int row = 0; row < height; )
            {
                int rowstoread = rowsperstrip - (row + img.row_offset) % rowsperstrip;
                int nrow = (row + rowstoread > height ? height - row : rowstoread);
                int offset_row = row + img.row_offset;

                if (img.tif.ReadEncodedStrip(img.tif.ComputeStrip(offset_row, 0), buf, p0, ((row + img.row_offset) % rowsperstrip + nrow) * scanline) < 0 && img.stoponerr)
                {
                    ret = false;
                    break;
                }

                if (img.tif.ReadEncodedStrip(img.tif.ComputeStrip(offset_row, 1), buf, p1, ((row + img.row_offset) % rowsperstrip + nrow) * scanline) < 0 && img.stoponerr)
                {
                    ret = false;
                    break;
                }

                if (img.tif.ReadEncodedStrip(img.tif.ComputeStrip(offset_row, 2), buf, p2, ((row + img.row_offset) % rowsperstrip + nrow) * scanline) < 0 && img.stoponerr)
                {
                    ret = false;
                    break;
                }

                if (img.alpha != 0)
                {
                    if ((img.tif.ReadEncodedStrip(img.tif.ComputeStrip(offset_row, 3), buf, pa, ((row + img.row_offset) % rowsperstrip + nrow) * scanline) < 0 && img.stoponerr))
                    {
                        ret = false;
                        break;
                    }
                }

                int pos = ((row + img.row_offset) % rowsperstrip) * scanline;
                
                img.putSeparate(img, raster, offset + y * width, rasterShift,
                    0, y, width, nrow,
                    buf, p0 + pos, p1 + pos, p2 + pos, img.alpha != 0 ? (pa + pos) : -1, bufferShift);

                y += (flip & FLIP_VERTICALLY) != 0 ? -nrow : nrow;
                row += nrow;
            }

            if ((flip & FLIP_HORIZONTALLY) != 0)
            {
                for (int line = 0; line < height; line++)
                {
                    int left = offset + line * width;
                    int right = left + width - 1;

                    while (left < right)
                    {
                        int temp = raster[left];
                        raster[left] = raster[right];
                        raster[right] = temp;
                        left++;
                        right--;
                    }
                }
            }

            return ret;
        }
All Usage Examples Of BitMiracle.LibTiff.Classic.TiffRgbaImage::setorientation