Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GifDecoder"/> class.
        /// </summary>
        /// <param name="image">
        /// The <see cref="Image"/> to decode.
        /// </param>
        public GifDecoder(Image image)
        {
            this.Height = image.Height;
            this.Width = image.Width;

            if (FormatUtilities.IsAnimated(image))
            {
                this.IsAnimated = true;

                if (this.IsAnimated)
                {
                    int frameCount = image.GetFrameCount(FrameDimension.Time);
                    int last = frameCount - 1;
                    double length = 0;

                    List<GifFrame> gifFrames = new List<GifFrame>();

                    // Get the times stored in the gif.
                    byte[] times = image.GetPropertyItem((int)ExifPropertyTag.FrameDelay).Value;

                    for (int i = 0; i < frameCount; i++)
                    {
                        // Convert each 4-byte chunk into an integer.
                        // GDI returns a single array with all delays, while Mono returns a different array for each frame.
                        TimeSpan delay = TimeSpan.FromMilliseconds(BitConverter.ToInt32(times, (4 * i) % times.Length) * 10);

                        // Find the frame
                        image.SelectActiveFrame(FrameDimension.Time, i);
                        Bitmap frame = new Bitmap(image);
                        frame.SetResolution(image.HorizontalResolution, image.VerticalResolution);
                        
                        // TODO: Get positions.
                        gifFrames.Add(new GifFrame { Delay = delay, Image = frame });

                        // Reset the position.
                        if (i == last)
                        {
                            image.SelectActiveFrame(FrameDimension.Time, 0);
                        }

                        length += delay.TotalMilliseconds;
                    }

                    this.GifFrames = gifFrames;
                    this.AnimationLength = length;

                    // Loop info is stored at byte 20737.
                    this.LoopCount = BitConverter.ToInt16(image.GetPropertyItem((int)ExifPropertyTag.LoopCount).Value, 0);
                    this.IsLooped = this.LoopCount != 1;
                }
            }
        }
    /// <summary>
    /// Gif转Texture2D
    /// Crash fixed...
    /// </summary>
    /// <param name="image"> System.Image</param>
    /// <returns>Texture2D集合</returns>
    private void Gif2Texture2D(System.Drawing.Image image)
    {
        //List<Texture2D> tex = new List<Texture2D>();
        if (image != null)
        {
            // 图片构成有两种形式: 1、多页(.gif)  2、多分辨率..
            // 获取image对象的dimenson数,打印结果是1。..
            Debug.Log("image对象的dimenson数:" + image.FrameDimensionsList.Length);
            // image.FrameDimensionsList[0]-->获取image对象第一个dimension的 Guid(全局唯一标识符)....
            // 根据指定的GUID创建一个提供获取图像框架维度信息的实例..
            FrameDimension frameDimension = new FrameDimension(image.FrameDimensionsList[0]);
            // 获取指定维度的帧数
            int framCount = image.GetFrameCount(frameDimension);
            // 遍历图像帧
            for (int i = 0; i < framCount; i++)
            {
                // 选择由维度和索引指定的帧(激活图像帧);
                image.SelectActiveFrame(frameDimension, i);
                // 创建指定大小的 Bitmap 的实例。
                Bitmap framBitmap = new Bitmap(image.Width, image.Height);
                // Test:將Bitmap轉成PNG
                // framBitmap.Save("E:/Desktop/Saved_"+i+".png", System.Drawing.Imaging.ImageFormat.Png);

                // 从指定的Image 创建新的Graphics,并在指定的位置使用原始物理大小绘制指定的 Image,将当前激活帧的图形绘制到framBitmap上;
                // 简单点就是从 frameBitmap(里面什么都没画,是张白纸)创建一个Graphics,然后执行画画DrawImage
                // System.Drawing.Graphics.FromImage(framBitmap).DrawImage(image, Point.Empty);

                /*using (System.Drawing.Graphics newGraphics = System.Drawing.Graphics.FromImage(framBitmap))
                 * {
                 *      newGraphics.DrawImage(image, Point.Empty);
                 * }*/
                System.Drawing.Graphics.FromImage(framBitmap).DrawImage(image, Point.Empty);

                /*
                 * // 创建一个指定大小的 Texture2D 的实例
                 * Texture2D frameTexture2D = new Texture2D(framBitmap.Width, framBitmap.Height, TextureFormat.ARGB32, true);
                 * // 执行Bitmap转Texture2D
                 * frameTexture2D.LoadImage(Bitmap2Byte(framBitmap));*/
                var frameTexture = new Texture2D(framBitmap.Width, framBitmap.Height);
                for (int x = 0; x < framBitmap.Width; x++)
                {
                    for (int y = 0; y < framBitmap.Height; y++)
                    {
                        System.Drawing.Color sourceColor = framBitmap.GetPixel(x, y);
                        frameTexture.SetPixel(framBitmap.Width - 1 - x, y, new Color32(sourceColor.R, sourceColor.G, sourceColor.B, sourceColor.A));                           // for some reason, x is flipped
                    }
                }
                frameTexture.Apply();

                // 添加到列表中...
                tex2DList.Add(frameTexture);
                //Debug.Log (frameTexture);

                // Test:將Texture2D轉成PNG
                // var bytes = frameTexture2D.EncodeToPNG();
                // Destroy(frameTexture2D);
                // File.WriteAllBytes("E:/Desktop/Saved_" + i + ".png", bytes);
            }
        }
    }
        public static Gif ImageToGif(Image i)
        {
            FrameDimension dimension = new FrameDimension(i.FrameDimensionsList[0]);

            int[] timings = new int[i.GetFrameCount(dimension)];
            return(new Gif(Enumerable.Range(0, i.GetFrameCount(dimension)).
                           Select(x =>
            {
                i.SelectActiveFrame(dimension, x);
                try
                {
                    timings[x] = BitConverter.ToInt32(i.GetPropertyItem(20736).Value, x * 4) * 10;     // this works on windows sometimes
                }
                catch
                {
                    try
                    {
                        var prop = i.GetPropertyItem(20736);
                        timings[x] = (prop.Value[0] + prop.Value[1] * 256) * 10;     // this works according to https://stackoverflow.com/questions/3785031/getting-the-frame-duration-of-an-animated-gif
                    }
                    catch
                    {
                        timings[x] = 33;     // just set it to 30fps lul, works for consoles
                    }
                }
                return new Bitmap(i);
            }).
                           ToArray(), timings));
        }
Example #4
0
        Image[] getFrames(Image originalImg)
        {
            int            numberOfFrames;
            FrameDimension TargetDimension;

            try
            {
                numberOfFrames  = originalImg.GetFrameCount(FrameDimension.Time);
                TargetDimension = FrameDimension.Time;
            }
            catch
            {
                numberOfFrames  = originalImg.GetFrameCount(FrameDimension.Page);
                TargetDimension = FrameDimension.Page;
            }

            Image[] frames = new Image[numberOfFrames];

            for (int i = 0; i < numberOfFrames; i++)
            {
                originalImg.SelectActiveFrame(TargetDimension, i);
                frames[i] = ((Image)originalImg.Clone());
            }

            return(frames);
        }
Example #5
0
        //-------------------------------------------------------------------------------
        //
        public ImageAnimation(Image img)
        {
            _image = img;
            FrameDimension = new FrameDimension(img.FrameDimensionsList[0]);
            MaxFrameCount = img.GetFrameCount(FrameDimension);
            PropertyItem pItemFrameDelay = img.GetPropertyItem(FRAME_DELAY);
            PropertyItem pItemFrameNum = img.GetPropertyItem(FRAME_NUM);
            FrameDelays = new int[MaxFrameCount];

            for (int i = 0; i < MaxFrameCount; i++) {
                FrameDelays[i] = BitConverter.ToInt32(pItemFrameDelay.Value, 4 * i);
            }
            MaxLoopCount = BitConverter.ToInt16(pItemFrameNum.Value, 0);

            LoopInfinity = (MaxLoopCount == 0);

            _timer = new Timer(Timer_Elapsed, null, Timeout.Infinite, Timeout.Infinite);
            try {
                _image.SelectActiveFrame(FrameDimension, 0);
            }
            catch (InvalidOperationException/* ex*/) {
                //Log.DebugLog(ex);
                //Debug.Assert(false, "Image.SelectActiveFrame失敗");
            }
        }
Example #6
0
    private List <Sprite> MyGif(System.Drawing.Image image)
    {
        List <Sprite> tex = new List <Sprite>();

        if (image != null)
        {
            Debug.Log("图片张数:" + image.FrameDimensionsList.Length);
            FrameDimension frame     = new FrameDimension(image.FrameDimensionsList[0]);
            int            framCount = image.GetFrameCount(frame); //获取维度帧数
            for (int i = 0; i < framCount; ++i)
            {
                image.SelectActiveFrame(frame, i);
                Bitmap framBitmap = new Bitmap(image.Width, image.Height);
                using (System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(framBitmap))
                {
                    graphic.DrawImage(image, Point.Empty);
                }
                Texture2D frameTexture2D = new Texture2D(framBitmap.Width, framBitmap.Height, TextureFormat.ARGB32, true);
                frameTexture2D.LoadImage(Bitmap2Byte(framBitmap));
                var sprite = Sprite.Create(frameTexture2D, new Rect(0, 0, frameTexture2D.width, frameTexture2D.height), new Vector2(0.5f, 0.5f));
                tex.Add(sprite);
            }
        }
        return(tex);
    }
    public void loadImage()
    {
        gifImage = ByteArrayToImage(www.bytes);

        if (gifImage == null)
        {
            return;
        }
        debugText.text = "Creating Image";
        var dimension  = new System.Drawing.Imaging.FrameDimension(gifImage.FrameDimensionsList[0]);
        int frameCount = gifImage.GetFrameCount(dimension);

        for (int i = 0; i < frameCount; i++)
        {
            gifImage.SelectActiveFrame(dimension, i);
            var frame = new System.Drawing.Bitmap(gifImage.Width, gifImage.Height);
            System.Drawing.Graphics.FromImage(frame).DrawImage(gifImage, System.Drawing.Point.Empty);
            Texture2D frameTexture = new Texture2D(frame.Width, frame.Height);

            //Debug.logger.Log("width: " + frame.Width + " height: " + frame.Height + " frame count: " + frameCount + " total: " + (frame.Width * frame.Height * frameCount));
            for (int x = 0; x < frame.Width; x++)
            {
                for (int y = 0; y < frame.Height; y++)
                {
                    System.Drawing.Color sourceColor = frame.GetPixel(x, y);
                    frameTexture.SetPixel(frame.Width - 1 + x, -y, new Color32(sourceColor.R, sourceColor.G, sourceColor.B, sourceColor.A)); // for some reason, x is flipped
                }
            }
            frameTexture.Apply();
            gifFrames.Add(frameTexture);
        }
        debugText.text = "Created Image";
        canOnGUI       = true;
    }
Example #8
0
        /// <summary>
        /// Getting the frames out of a GIF image.
        /// </summary>
        /// <param name="originalImg"></param>
        /// <returns></returns>
        public static BitmapImage[] GetFrames(Image originalImg)
        {
            int numberOfFrames = originalImg.GetFrameCount(FrameDimension.Time);

            Image[] frames = new System.Drawing.Image[numberOfFrames];

            BitmapImage[] bitmapFrames = new BitmapImage[numberOfFrames];

            for (int i = 0; i < numberOfFrames; i++)
            {
                originalImg.SelectActiveFrame(FrameDimension.Time, i);
                frames[i] = ((System.Drawing.Image)originalImg.Clone());
                using (var ms = new MemoryStream())
                {
                    frames[i].Save(ms, ImageFormat.Png);
                    ms.Seek(0, SeekOrigin.Begin);

                    var bitmapImage = new BitmapImage();
                    bitmapImage.BeginInit();
                    bitmapImage.CacheOption  = BitmapCacheOption.OnLoad;
                    bitmapImage.StreamSource = ms;
                    bitmapImage.EndInit();

                    bitmapFrames[i] = bitmapImage;
                }
            }

            return(bitmapFrames);
        }
Example #9
0
        public static void Iniciar()
        {
            Image          image      = Image.FromFile(@"C:\Users\900103\Desktop\terra1.gif");
            FrameDimension dimension  = new FrameDimension(image.FrameDimensionsList[0]);
            int            frameCount = image.GetFrameCount(dimension);
            StringBuilder  sb;

            int left = Console.WindowLeft, top = Console.WindowTop;

            char[] chars = { '.', '#', '@', '%', '=', '+', '*', ':', '-', '.', ' ' };

            for (int i = 0; ; i = (i + 1) % frameCount)
            {
                sb = new StringBuilder();
                image.SelectActiveFrame(dimension, i);

                for (int h = 0; h < image.Height; h++)
                {
                    for (int w = 0; w < image.Width; w++)
                    {
                        Color cl    = ((Bitmap)image).GetPixel(w, h);
                        int   gray  = (cl.R + cl.R + cl.B) / 3;
                        int   index = (gray * (chars.Length - 1)) / 255;

                        sb.Append(chars[index]);
                    }
                    sb.Append('\n');
                }

                Console.SetCursorPosition(left, top);
                Console.Write(sb.ToString());

                System.Threading.Thread.Sleep(200);
            }
        }
Example #10
0
        /// <summary>
        /// Return frame(s) as list of binary from jpeg, png, bmp or gif image file
        /// </summary>
        /// <param name="fileName">image file name</param>
        /// <returns>System.Collections.Generic.List of byte</returns>
        public static List <Bitmap> GetFrames(string fileName)
        {
            var tmpFrames = new List <byte[]>();

            // Check the image format to determine what format
            // the image will be saved to the memory stream in
            var guidToImageFormatMap = new Dictionary <Guid, ImageFormat>()
            {
                { ImageFormat.Bmp.Guid, ImageFormat.Bmp },
                { ImageFormat.Gif.Guid, ImageFormat.Png },
                { ImageFormat.Icon.Guid, ImageFormat.Png },
                { ImageFormat.Jpeg.Guid, ImageFormat.Jpeg },
                { ImageFormat.Png.Guid, ImageFormat.Png }
            };

            using (Image gifImg = Image.FromFile(fileName, true))
            {
                Guid imageGuid = gifImg.RawFormat.Guid;

                ImageFormat imageFormat = (from pair in guidToImageFormatMap where imageGuid == pair.Key select pair.Value).FirstOrDefault();

                if (imageFormat == null)
                {
                    throw new NoNullAllowedException("Unable to determine image format");
                }

                //Get the frame count
                var dimension  = new FrameDimension(gifImg.FrameDimensionsList[0]);
                int frameCount = gifImg.GetFrameCount(dimension);

                //Step through each frame
                for (int i = 0; i < frameCount; i++)
                {
                    //Set the active frame of the image and then
                    gifImg.SelectActiveFrame(dimension, i);

                    //write the bytes to the tmpFrames array
                    using (var ms = new MemoryStream())
                    {
                        gifImg.Save(ms, imageFormat);
                        tmpFrames.Add(ms.ToArray());
                    }
                }

                //Get list of frame(s) from image file.
                var myBitmaps = new List <Bitmap>();

                foreach (byte[] item in tmpFrames)
                {
                    Bitmap tmpBitmap = ConvertBytesToImage(item);

                    if (tmpBitmap != null)
                    {
                        myBitmaps.Add(tmpBitmap);
                    }
                }

                return(myBitmaps);
            }
        }
Example #11
0
        public static string[] ConvertTiffToJpeg(string fileName)
        {
            using (System.Drawing.Image imageFile = System.Drawing.Image.FromFile(fileName))
            {
                FrameDimension frameDimensions = new FrameDimension(
                    imageFile.FrameDimensionsList[0]);

                // Gets the number of pages from the tiff image (if multipage)
                int      frameNum  = imageFile.GetFrameCount(frameDimensions);
                string[] jpegPaths = new string[frameNum];

                for (int frame = 0; frame < frameNum; frame++)
                {
                    // Selects one frame at a time and save as jpeg.
                    imageFile.SelectActiveFrame(frameDimensions, frame);
                    using (Bitmap bmp = new Bitmap(imageFile))
                    {
                        jpegPaths[frame] = String.Format("{0}\\{1}{2}.jpg",
                                                         System.IO.Path.GetDirectoryName(fileName),
                                                         System.IO.Path.GetFileNameWithoutExtension(fileName),
                                                         (frameNum == 1 ? string.Empty : frame.ToString()));

                        bmp.Save(jpegPaths[frame], ImageFormat.Jpeg);
                    }
                }

                return(jpegPaths);
            }
        }
Example #12
0
 public Image GetPage(int page)
 {
     if (page < 1 || page > _pages) return null;
     img = Bitmap.FromFile(_filename);
     img.SelectActiveFrame(FrameDimension.Page, page - 1);
     Image ret = new Bitmap(img);
     img.Dispose();
     return ret;
 }
Example #13
0
        private void GifBox(Image gif, PictureBox pic)
        {
            FrameDimension fd = new FrameDimension(gif.FrameDimensionsList[0]);
            int count = gif.GetFrameCount(System.Drawing.Imaging.FrameDimension.Time);

            for (int i = 0; i < count; i++)
            {
                gif.SelectActiveFrame(fd, i);
                pic.Image = gif;
            }
        }
Example #14
0
        /// <summary>
        /// 获取图片中的各帧
        /// </summary>
        /// <param name="pPath">图片路径</param>
        /// <param name="pSavedPath">保存路径</param>
        public static void GetFrames(string pPath, string pSavedPath)
        {
            System.Drawing.Image gif = System.Drawing.Image.FromFile(pPath);
            FrameDimension       fd  = new FrameDimension(gif.FrameDimensionsList[0]);
            int count = gif.GetFrameCount(fd); //获取帧数(gif图片可能包含多帧,其它格式图片一般仅一帧)

            for (int i = 0; i < count; i++)    //以Jpeg格式保存各帧
            {
                gif.SelectActiveFrame(fd, i);
                gif.Save(pSavedPath + "\\frame_" + i + ".jpg", ImageFormat.Jpeg);
            }
        }
Example #15
0
        private void initAnimation()
        {
            var assembly = System.Reflection.Assembly.GetExecutingAssembly().Location;
            var path     = System.IO.Path.GetDirectoryName(assembly);


            path = path + "\\Images\\progress_animation.gif";
            //log.Info("animation image path: " + path);
            animatedGifImage = System.Drawing.Image.FromFile(path);
            dimension        = new FrameDimension(animatedGifImage.FrameDimensionsList[0]);
            framesCount      = animatedGifImage.GetFrameCount(FrameDimension.Time);
            animationFrames  = new BitmapImage[framesCount];
            for (int frame = 0; frame < framesCount; ++frame)
            {
                animatedGifImage.SelectActiveFrame(dimension, frame);
                animationFrames[frame] = getBitmapImage(animatedGifImage);
            }

            currentFrame = 0;
            animatedGifImage.SelectActiveFrame(dimension, currentFrame);
            initTimer();
        }
Example #16
0
        public static Bitmap GetStackImage(Image image, int count, Item item) {
            if (image == null) return new Bitmap(item.image);
            int max = image.GetFrameCount(FrameDimension.Time);
            int index = 0;

            if (count <= 5) index = count - 1;
            else if (count <= 10) index = 5;
            else if (count <= 25) index = 6;
            else if (count <= 50) index = 7;
            else index = 8;

            if (index >= max) index = max - 1;
            image.SelectActiveFrame(FrameDimension.Time, index);
            return new Bitmap((Image)image.Clone());
        }
Example #17
0
    /*/// <summary>
     * /// This method converts the read in byte arry to a System.Drawing.Bitmap
     * /// </summary>
     * /// <param name="data"> the byte array to be convereted</param>
     * /// <returns></returns>
     * public System.Drawing.Bitmap byteArrayToBitMap(byte[] data){
     * System.Drawing.Bitmap bmp;
     *
     * System.Drawing.ImageConverter ic = new System.Drawing.ImageConverter();
     * bmp = (System.Drawing.Bitmap)ic.ConvertFrom(data);
     * //Debug.Log("Converted byteArray to bit map");
     * return bmp;
     *
     * }*/

    /*
     * public void byteArrayToTexture2D(byte[] data)
     * {
     *  int width = data[6];
     *  int height = data[8];
     *  Debug.Log("Width: " + width + " Height: " + height);
     *  Texture2D bmp = new Texture2D(width, height);
     *  bmp.LoadRawTextureData(data);
     *  myRawImage.texture = bmp;
     * }*/

    /// <summary>
    /// This handles loading all fo the data from the given url and converts it into a readable image type and then allows the OnGUI function to draw the gif
    /// </summary>
    public void loadImage()
    {
        //Debug.Log("Called Load Image BACK");
        gifImage = ByteArrayToImage(www.bytes);

        if (gifImage == null)
        {
            return;
        }

        isGif = true;

        var dimension  = new System.Drawing.Imaging.FrameDimension(gifImage.FrameDimensionsList[0]);
        int frameCount = gifImage.GetFrameCount(dimension);

        Debug.Log("Dimensions: Frames: " + frameCount + " Width: " + gifImage.Width + " Height: " + gifImage.Height + " Pixels: " + (gifImage.Width * gifImage.Height));
        int width  = 0;
        int height = 0;



        for (int i = 0; i < frameCount; i++)
        {
            gifImage.SelectActiveFrame(dimension, i);
            var frame = new System.Drawing.Bitmap(gifImage.Width, gifImage.Height);

            System.Drawing.Graphics.FromImage(frame).DrawImage(gifImage, Point.Empty);


            Texture2D frameTexture = new Texture2D(frame.Width, frame.Height);
            for (int x = 0; x < frame.Width; x++)
            {
                for (int y = 0; y < frame.Height; y++)
                {
                    System.Drawing.Color sourceColor = frame.GetPixel(x, y);
                    frameTexture.SetPixel(frame.Width + x + 1, -y, new Color32(sourceColor.R, sourceColor.G, sourceColor.B, sourceColor.A)); // for some reason, x is flipped
                }
            }
            frameTexture.Apply();
            gifFrames.Add(frameTexture);
            width  = frame.Width;
            height = frame.Height;
        }
        byteArrayTextConversion(bytearrayholder);
        //Debug.Log("Starting ON GUI!");
        canOnGUI = true;
    }
Example #18
0
        //-------------------------------------------------------------------------------
        //
        public ImageAnimation(Image img)
        {
            _image = img;
            FrameDimension = new FrameDimension(img.FrameDimensionsList[0]);
            MaxFrameCount = img.GetFrameCount(FrameDimension);
            PropertyItem pItemFrameDelay = img.GetPropertyItem(FRAME_DELAY);
            PropertyItem pItemFrameNum = img.GetPropertyItem(FRAME_NUM);
            FrameDelays = new int[MaxFrameCount];

            for (int i = 0; i < MaxFrameCount; i++) {
                FrameDelays[i] = BitConverter.ToInt32(pItemFrameDelay.Value, 4 * i);
            }
            MaxLoopCount = BitConverter.ToInt16(pItemFrameNum.Value, 0);

            LoopInfinity = (MaxLoopCount == 0);

            _timer = new Timer(Timer_Elapsed, null, Timeout.Infinite, Timeout.Infinite);
            _image.SelectActiveFrame(FrameDimension, 0);
        }
Example #19
0
        /// <summary>
        /// Gif转Texture2D
        /// </summary>
        /// <param name="image"> System.Image</param>
        /// <returns>Texture2D集合</returns>
        private List <Texture2D> Gif2Texture2D(System.Drawing.Image image)
        {
            var tex = new List <Texture2D>();

            if (image == null)
            {
                return(tex);
            }
            // 图片构成有两种形式: 1、多页(.gif)  2、多分辨率
            // 获取image对象的dimenson数,打印结果是1。
            Debug.Log("image对象的dimenson数:" + image.FrameDimensionsList.Length);
            // image.FrameDimensionsList[0]-->获取image对象第一个dimension的 Guid(全局唯一标识符)
            // 根据指定的GUID创建一个提供获取图像框架维度信息的实例
            var frameDimension = new FrameDimension(image.FrameDimensionsList[0]);

            // 获取指定维度的帧数
            _framCount = image.GetFrameCount(frameDimension);
            Debug.Log(_framCount);
            // 遍历图像帧
            for (var i = 0; i < _framCount; i++)
            {
                // 选择由维度和索引指定的帧(激活图像帧);
                image.SelectActiveFrame(frameDimension, i);
                // 创建指定大小的 Bitmap 的实例。
                var framBitmap = new Bitmap(image.Width, image.Height);
                // 从指定的Image 创建新的Graphics,并在指定的位置使用原始物理大小绘制指定的 Image,将当前激活帧的图形绘制到framBitmap上;
                // 简单点就是从 frameBitmap(里面什么都没画,是张白纸)创建一个Graphics,然后执行画画DrawImage
                using (var newGraphics = System.Drawing.Graphics.FromImage(framBitmap))
                {
                    newGraphics.DrawImage(image, Point.Empty);
                }
                // 创建一个指定大小的 Texture2D 的实例
                var frameTexture2D = new Texture2D(framBitmap.Width, framBitmap.Height, TextureFormat.ARGB32, true);
                // 执行Bitmap转Texture2D
                frameTexture2D.LoadImage(Bitmap2Byte(framBitmap));
                // 添加到列表中
                tex.Add(frameTexture2D);
            }
            return(tex);
        }
Example #20
0
        private System.Drawing.Image pobierzStrone(int numerStrony)
        {
            MemoryStream ms = null;

            System.Drawing.Image strona = null;
            try
            {
                ms = new MemoryStream();
                _skan.SelectActiveFrame(FrameDimension.Page, numerStrony - 1);
                _skan.Save(ms, Konfiguracja.FormatStrony);

                strona = System.Drawing.Image.FromStream(ms, true, false);

                return(strona);
            }
            catch
            {
                ms.Close();
                strona.Dispose();
                throw;
            }
        }
Example #21
0
        private static void ProcessingThread(byte[] gifData, AnimationInfo animationInfo)
        {
            System.Drawing.Image gifImage  = System.Drawing.Image.FromStream(new MemoryStream(gifData));
            FrameDimension       dimension = new FrameDimension(gifImage.FrameDimensionsList[0]);
            int frameCount = gifImage.GetFrameCount(dimension);

            animationInfo.frameCount  = frameCount;
            animationInfo.initialized = true;
            animationInfo.frames      = new List <FrameInfo>(frameCount);

            int firstDelayValue = -1;

            var delays = gifImage.GetPropertyItem(20736).Value;

            for (int i = 0; i < frameCount; i++)
            {
                gifImage.SelectActiveFrame(dimension, i);

                using (Bitmap bitmap = new Bitmap(gifImage)) {
                    bitmap.MakeTransparent(System.Drawing.Color.Black);
                    bitmap.RotateFlip(RotateFlipType.Rotate180FlipX);

                    BitmapData frame        = bitmap.LockBits(new Rectangle(Point.Empty, gifImage.Size), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
                    FrameInfo  currentFrame = new FrameInfo(frame.Width, frame.Height);

                    Marshal.Copy(frame.Scan0, currentFrame.colors, 0, currentFrame.colors.Length);

                    int delayPropertyValue = BitConverter.ToInt32(delays, i * 4);
                    if (firstDelayValue == -1)
                    {
                        firstDelayValue = delayPropertyValue;
                    }

                    currentFrame.delay = delayPropertyValue * 10;
                    animationInfo.frames.Add(currentFrame);
                }
            }
        }
Example #22
0
    private void LoadGifFrame(int frameIndex)
    {
        gifImage.SelectActiveFrame(dimension, frameIndex);
        var frame = new Bitmap(gifImage.Width, gifImage.Height);

        System.Drawing.Graphics.FromImage(frame).DrawImage(gifImage, Point.Empty);

        new Thread(() =>
        {
            Color32[] pixels = new Color32[frame.Width * frame.Height];

            for (int x = 0; x < frame.Width; x++)
            {
                for (int y = 0; y < frame.Height; y++)
                {
                    System.Drawing.Color sourceColor = frame.GetPixel(x, y);
                    pixels[x + (frame.Height - 1 - y) * frame.Width] = new Color32(sourceColor.R, sourceColor.G, sourceColor.B, sourceColor.A);
                }
            }

            eventProcessor.QueueEvent(delegate { CreateTexture(pixels, frame.Width, frame.Height, frameIndex); }); // Execute this on main thread
        }).Start();
    }
        /// <summary>
        /// Convert an Image to a spritesheet
        /// </summary>
        /// <param name="gif">The original gif file</param>
        /// <param name="columns">How many columns to use</param>
        /// <returns></returns>
        public Bitmap GifToSpritesheet(System.Drawing.Image gif, int columns = 1)
        {
            FrameDimension frameSize = new FrameDimension(gif.FrameDimensionsList[0]);

            System.Drawing.Size imageSize = new System.Drawing.Size(gif.Size.Width, gif.Size.Height);
            int      frames = gif.GetFrameCount(frameSize);
            int      rows   = (int)Math.Ceiling((double)frames / columns);
            Bitmap   bitmap = new Bitmap(columns * imageSize.Width, rows * imageSize.Height);
            Graphics g      = Graphics.FromImage(bitmap);

            // In case of adding a background color
//            Brush brush = new SolidBrush(somecolor);
//            g.FillRectangle(brush, new Rectangle(0, 0, bitmap.Width, bitmap.Height));

            for (int i = 0; i < frames; i++)
            {
                gif.SelectActiveFrame(frameSize, i);
                g.DrawImage(gif, i % columns * imageSize.Width, i / columns * imageSize.Height);
            }
            g.Dispose();

            return(bitmap);
        }
Example #24
0
        public override bool LoadImageData(String pathToGifFile, ImageSequence destImageSequence)
        {
            if (File.Exists(pathToGifFile) && Path.GetExtension(pathToGifFile).ToUpper() == ".GIF")
            {
                System.Drawing.Image gifImg = System.Drawing.Image.FromFile(pathToGifFile);
                if (gifImg != null)
                {
                    FrameDimension dimension = new FrameDimension(gifImg.FrameDimensionsList[0]);
                    // Number of frames
                    int frameCount = gifImg.GetFrameCount(dimension);

                    for (int i = 0; i < frameCount; i++)
                    {
                        // Return an Image at a certain index
                        gifImg.SelectActiveFrame(dimension, i);
                        ImageBuffer frame = new ImageBuffer();
                        ConvertBitmapToImage(frame, new Bitmap(gifImg));
                        destImageSequence.AddImage(frame);
                    }

                    try
                    {
                        PropertyItem item = gifImg.GetPropertyItem(0x5100);                         // FrameDelay in libgdiplus
                        // Time is in 1/100th of a second
                        destImageSequence.SecondsPerFrame = (item.Value[0] + item.Value[1] * 256) / 100.0;
                    }
                    catch
                    {
                        destImageSequence.SecondsPerFrame = 2;
                    }

                    return(true);
                }
            }

            return(false);
        }
Example #25
0
        static void Main(string[] args)
        {
            //Thank you Сергей Кровлин
            //His Youtube link is under my video.
            Image          image      = Image.FromFile(@"C:\Users\franc\OneDrive\Área de Trabalho\1KILE.gif");
            FrameDimension dimension  = new FrameDimension(image.FrameDimensionsList[0]);
            int            frameCount = image.GetFrameCount(dimension);
            StringBuilder  sb;

            int left = Console.WindowLeft, top = Console.WindowTop;

            char[] chars = { '#', '#', '@', '%', '=', '+', '*', ':', '-', '.', ' ' };

            for (int i = 0; ; i = (i + 1) % frameCount)
            {
                sb = new StringBuilder();
                image.SelectActiveFrame(dimension, i);

                for (int h = 0; h < image.Height; h++)
                {
                    for (int w = 0; w < image.Width; w++)
                    {
                        Color cl    = ((Bitmap)image).GetPixel(w, h);
                        int   gray  = (cl.R + cl.R + cl.B) / 3;
                        int   index = (gray * (chars.Length - 1)) / 255;

                        sb.Append(chars[index]);
                    }
                    sb.Append('\n');
                }

                Console.SetCursorPosition(left, top);
                Console.Write(sb.ToString());

                System.Threading.Thread.Sleep(600);
            }
        }
Example #26
0
    /// <summary>
    /// gif to List<Texture2D>
    /// </summary>
    /// <param name="gifImage"></param>
    /// <returns></returns>
    List<Texture2D> GifToTexture2D(System.Drawing.Image gifImage)
    {
        List<Texture2D> target = null;
        if (gifImage != null)
        {
            target = new List<Texture2D>();

            //图片的构成有两种形式:1.多页(.gif) 2.多分辨率
            Debug.Log("dimenson:" + gifImage.FrameDimensionsList.Length);

            //根据指定的GUID(gifImage.FrameDimensionsList[0])
            //创建一个提供获取图像框架维度信息的实例
            FrameDimension frameDimension = new FrameDimension(gifImage.FrameDimensionsList[0]);

            int frameCount = gifImage.GetFrameCount(frameDimension);
            for (int i = 0; i < frameCount; i++)
            {
                gifImage.SelectActiveFrame(frameDimension, i);

                //创建Bitmap的实例
                Bitmap frameBitmap = new Bitmap(gifImage.Width, gifImage.Height);

                //将GifImage通过Graphics画到Bitmap上
                using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(frameBitmap))
                {
                    graphics.DrawImage(gifImage, Point.Empty);
                }

                //创建Texture2D的实例
                Texture2D frameTexture2D = new Texture2D(frameBitmap.Width, frameBitmap.Height, TextureFormat.ARGB32, true);
                frameTexture2D.LoadImage(Bitmap2Byte(frameBitmap));
                target.Add(frameTexture2D);
            }
        }
        Debug.Log("编译完成");
        return target;
    }
    private List <byte[]> GetBytesFromImage(System.Drawing.Image image)
    {
        List <byte[]> tex = new List <byte[]>();

        if (image != null)
        {
            FrameDimension frame = new FrameDimension(image.FrameDimensionsList[0]);
            //获取维度帧数
            int frameCount = image.GetFrameCount(frame);
            for (int i = 0; i < frameCount; ++i)
            {
                image.SelectActiveFrame(frame, i);
                using (MemoryStream stream = new MemoryStream())
                {
                    image.Save(stream, ImageFormat.Png);
                    byte[] data = new byte[stream.Length];
                    stream.Seek(0, SeekOrigin.Begin);
                    stream.Read(data, 0, Convert.ToInt32(stream.Length));
                    tex.Add(data);
                }
            }
        }
        return(tex);
    }
Example #28
0
        public override bool LoadImageData(Stream stream, ImageSequence destImageSequence)
        {
            System.Drawing.Image gifImg = System.Drawing.Image.FromStream(stream);
            if (gifImg != null)
            {
                FrameDimension dimension = new FrameDimension(gifImg.FrameDimensionsList[0]);
                // Number of frames
                int frameCount = gifImg.GetFrameCount(dimension);

                for (int i = 0; i < frameCount; i++)
                {
                    // Return an Image at a certain index
                    gifImg.SelectActiveFrame(dimension, i);
                    ImageBuffer frame = new ImageBuffer();
                    ConvertBitmapToImage(frame, new Bitmap(gifImg));
                    destImageSequence.AddImage(frame);
                }

                try
                {
                    PropertyItem item = gifImg.GetPropertyItem(0x5100);                     // FrameDelay in libgdiplus
                    // Time is in 1/100th of a second
                    destImageSequence.SecondsPerFrame = (item.Value[0] + item.Value[1] * 256) / 100.0;
                }
                catch (Exception e)
                {
                    Debug.Print(e.Message);
                    GuiWidget.BreakInDebugger();
                    destImageSequence.SecondsPerFrame = 2;
                }

                return(true);
            }

            return(false);
        }
Example #29
0
		// this method avoid checks that aren't requied for UpdateFrames()
		private static void UpdateImageFrame (Image image)
		{
			AnimateEventArgs aea = (AnimateEventArgs) ht [image];
			image.SelectActiveFrame (FrameDimension.Time, aea.GetNextFrame ());
		}
Example #30
0
        public Image[] getTiffImages(Image sourceImage)
        {
            MemoryStream ms = null;
            int pageCount = getPageCount(sourceImage);

            Image[] returnImage = new Image[pageCount];

            try
            {
                Guid objGuid = sourceImage.FrameDimensionsList[0];
                FrameDimension objDimension = new FrameDimension(objGuid);

                for (int i = 0; i < pageCount; i++)
                {
                    ms = new MemoryStream();
                    sourceImage.SelectActiveFrame(objDimension, i);
                    sourceImage.Save(ms, ImageFormat.Tiff);
                    returnImage[i] = Image.FromStream(ms);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                ms.Close();
            }

            return returnImage;
        }
Example #31
0
        /// <summary>
        /// Tif转换至Jpg
        /// </summary>
        /// <param name="tifFilePath">tif文件路径</param>
        /// <param name="imgQuality"></param>
        /// <param name="combineImages">合并图片标识</param>
        /// <returns>Jpeg文件路径</returns>
        public static string Tif2Jpeg(string tifFilePath, int imgQuality, Boolean combineImages)
        {
            try
            {
                int                  len          = tifFilePath.LastIndexOf(".tif");
                string               fileName2    = tifFilePath.Substring(0, len);
                string               filePath     = fileName2.Substring(0, fileName2.LastIndexOf('\\') + 1);
                FileStream           stream       = File.OpenRead(tifFilePath);
                Bitmap               bmp          = new Bitmap(stream);
                System.Drawing.Image image        = bmp;
                Guid                 objGuid      = image.FrameDimensionsList[0];
                FrameDimension       objDimension = new FrameDimension(objGuid);
                int                  totFrame     = image.GetFrameCount(objDimension);
                int                  count        = totFrame;

                if (count <= 0)
                {
                    bmp.Dispose();
                    return("");
                }

                Bitmap   resultImg      = null;
                Graphics resultGraphics = null;
                int      imageHeight;
                for (int i = 0; i < totFrame; i++)//循环生成多张图片
                {
                    image.SelectActiveFrame(objDimension, i);

                    //合并图片
                    if (combineImages)
                    {
                        if (resultImg == null)
                        {
                            imageHeight = image.Height;

                            //resultImg = new Bitmap(tempImage.Width, tempImage.Height * imgCount);
                            resultImg      = new Bitmap(792, 1120 * totFrame);
                            resultGraphics = Graphics.FromImage(resultImg);
                        }

                        if (i == 0)
                        {
                            resultGraphics.DrawImage(image, 0, 0);
                        }
                        else
                        {
                            resultGraphics.DrawImage(image, 0, 1120 * i);
                            //resultGraphics.DrawImage(tempImage, 0, imageHeight * i);
                        }
                    }

                    //保存图片
                    ImageUtility.CompressAsJPG(new Bitmap(image), filePath + "\\" + i + ".jpg", imgQuality);
                    //image.Save(filePath + "\\" + i + ".jpg", ImageFormat.Jpeg);
                }

                string imgFilePath = string.Empty;

                if (combineImages)
                {
                    imgFilePath = tifFilePath.Replace(".tif", ".jpg");
                    //ImageUtility.ThumbAsJPG(resultImg, result, (int)(resultImg.Width * 0.4), (int)(resultImg.Height * 0.4), quality);
                    ImageUtility.CompressAsJPG(resultImg, imgFilePath, imgQuality);
                    resultGraphics.Dispose();
                }
                else
                {
                    imgFilePath = filePath + "\\0.jpg";
                }
                bmp.Dispose();
                image.Dispose();
                stream.Close();
                //File.Delete(tifFilePath);
                return(imgFilePath);
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }
Example #32
0
        static Image[] GetGifFrames(Image inputImage)
        {
            var outputImages = new List<Image>();

            var frameDimension = new FrameDimension(inputImage.FrameDimensionsList[0]);

            var frameCount = inputImage.GetFrameCount(frameDimension);

            for (var i = 0; i < frameCount; i++)
            {
                inputImage.SelectActiveFrame(frameDimension, i);

                var outputImage = new Bitmap(inputImage.Width, inputImage.Height, PixelFormat.Format32bppArgb);

                var graphics = Graphics.FromImage(outputImage);

                graphics.DrawImage(inputImage, 0, 0, inputImage.Width, inputImage.Height);

                outputImages.Add(outputImage);
            }

            return outputImages.ToArray();
        }
Example #33
0
        private void loadImage(Guid guid)
        {
            try
            {
                this.Show();
                if (_strFilePath == null)
                {
                    ultraToolbarsManagerStandard.Tools["PdfConvert"].SharedProps.Enabled = false;
                    ultraToolbarsManagerStandard.Tools["Delete"].SharedProps.Enabled = false;
                    ultraToolbarsManagerStandard.Tools["ZoomIn"].SharedProps.Enabled = false;
                    ultraToolbarsManagerStandard.Tools["ZoomOut"].SharedProps.Enabled = false;
                    ultraToolbarsManagerStandard.Tools["RotateLeft"].SharedProps.Enabled = false;
                    ultraToolbarsManagerStandard.Tools["RotateRight"].SharedProps.Enabled = false;
                    if (_ultraToolbarAttivita != null)
                    {
                        _ultraToolbarAttivita.Visible = false;
                        _ultraMenuAttivita.SharedProps.Visible = false;
                    }
                }
                else
                {
                    ultraToolbarsManagerStandard.Tools["PdfConvert"].SharedProps.Enabled = true;
                    ultraToolbarsManagerStandard.Tools["Delete"].SharedProps.Enabled = true;
                    ultraToolbarsManagerStandard.Tools["ZoomIn"].SharedProps.Enabled = true;
                    ultraToolbarsManagerStandard.Tools["ZoomOut"].SharedProps.Enabled = true;
                    ultraToolbarsManagerStandard.Tools["RotateLeft"].SharedProps.Enabled = true;
                    ultraToolbarsManagerStandard.Tools["RotateRight"].SharedProps.Enabled = true;
                    if (_ultraToolbarAttivita != null)
                    {
                        _ultraToolbarAttivita.Visible = true;
                        _ultraMenuAttivita.SharedProps.Visible = true;
                    }

                    _imageGuid = guid;
                    picBoxSize();

                    // Changed the cursor to waitCursor
                    Cursor = System.Windows.Forms.Cursors.WaitCursor;
                    // Sets the tiff file as an image object.
                    _objImage = System.Drawing.Image.FromFile(_strFilePath);
                    Guid objGuid = _objImage.FrameDimensionsList[0];
                    System.Drawing.Imaging.FrameDimension objDimension = new System.Drawing.Imaging.FrameDimension(objGuid);

                    //Gets the total number of frames in the .tiff file
                    _totFrame = _objImage.GetFrameCount(objDimension);
                    if (_totFrame > 1)
                        base.ultraToolbarsManagerStandard.Tools["Next"].SharedProps.Enabled = true;

                    //Adds number of frames to the combo box for displaying purposes.
                    _cboFrameNo.ResetValueList();
                    for (int i = 1; i <= _totFrame; i++)
                    {
                        _cboFrameNo.ValueList.ValueListItems.Add(new Infragistics.Win.ValueListItem(i, i.ToString()));
                    }

                    //Sets the temporary folder
                    _strPath = System.IO.Path.GetTempPath() + "FaxGest\\";

                    //Saves every frame as a seperate file.
                    _curF = 0;
                    for (int z = 0; z < _totFrame; z++)
                    {
                        _objImage.SelectActiveFrame(objDimension, _curF);
                        _objImage.Save(_strPath + _imageGuid + "_" + _curF + ".tif", System.Drawing.Imaging.ImageFormat.Tiff);
                        _curF++;
                    }
                    _curF = 0;

                    // Displayes the frames
                    displayFrame();
                    Cursor = System.Windows.Forms.Cursors.Default;
                }
            }

            catch { }

        }
Example #34
0
        private void Convert(string filename, long compression_level)
        {
            try
            {
                Dispatcher.Invoke(new Action(() =>
                {
                    if (!File.Exists(log_path))
                    {
                        using (File.Create(log_path));
                    }
                }), DispatcherPriority.ContextIdle);

                //string log_path = tb_browse.Text + "//log.txt";
                //if (!File.Exists(log_path)) {
                //    using (File.Create(log_path)) ;
                //}
                string destinaton = "";
                string strTemp    = System.IO.Path.GetExtension(filename).ToLower();

                if (strTemp == ".tif")
                {
                    destinaton = System.IO.Path.ChangeExtension(filename, "pdf");
                }
                if (strTemp == ".tiff")
                {
                    destinaton = System.IO.Path.ChangeExtension(filename, "pdf");
                }

                System.Drawing.Image image = System.Drawing.Image.FromFile(filename);
                PdfDocument          doc   = new PdfDocument();
                XGraphics            xgr;
                int count = image.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
                for (int pageNum = 0; pageNum < count; pageNum++)
                {
                    image.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, pageNum);
                    System.Drawing.Image image2;
                    var ms        = new MemoryStream();
                    var encoder   = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == System.Drawing.Imaging.ImageFormat.Jpeg.Guid);
                    var encParams = new EncoderParameters()
                    {
                        Param = new[] { new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compression_level) }
                    };
                    image.Save(ms, encoder, encParams);
                    image2 = System.Drawing.Image.FromStream(ms);
                    PdfPage page = new PdfPage();
                    doc.Pages.Add(page);
                    xgr = XGraphics.FromPdfPage(page);

                    // if (image2.Height == image2.Width)
                    //return MyAspectEnum.Square;
                    if (image2.Height > image2.Width)
                    {
                        page.Orientation = PdfSharp.PageOrientation.Portrait;
                    }
                    else
                    {
                        page.Orientation = PdfSharp.PageOrientation.Landscape;
                    }

                    XImage ximg = XImage.FromGdiPlusImage(image2);
                    xgr.DrawImage(ximg, 0, 0);
                }
                doc.Save(destinaton);
                doc.Close();
                image.Dispose();


                // Dispatcher.Invoke(new Action(() => { rtb_log.AppendText("\nFile " + filename + " converted successfully!"); }), DispatcherPriority.ContextIdle);

                Dispatcher.Invoke(new Action(() =>
                {
                    rtb_log.AppendText("\nFile " + filename + " converted successfully!");
                }), DispatcherPriority.ContextIdle);



                File.AppendAllText(log_path, Environment.NewLine + DateTime.Now.ToString() + " File " + filename + " converted successfully!");

                label3.Content = "Files converted: " + counter + "/" + counter_total;
                counter++;
            }
            catch (Exception ex)
            {
                Dispatcher.Invoke(new Action(() =>
                {
                    rtb_log.AppendText("Error " + ex.Message);
                }), DispatcherPriority.ContextIdle);
            }
        }
Example #35
0
        public string AddPage(Image image, PdfMode mode, string sessionName, Rectangle dimension)
        {
            Guid           objGuid    = image.FrameDimensionsList[0];
            FrameDimension frameDim   = new FrameDimension(objGuid);
            int            frameCount = image.GetFrameCount(frameDim);
            string         pageBody   = string.Empty;

            for (int i = 0; i < frameCount; i++)
            {
                image.SelectActiveFrame(frameDim, i);
                switch (mode)
                {
                case PdfMode.ImageOnly:
                {
                    AddImage(image, sessionName, dimension);
                    break;
                }

                case PdfMode.Ocr:
                {
                    AddImage(image, sessionName, dimension);

                    if (OnProcessImageForOcr != null)
                    {
                        image = OnProcessImageForOcr(image);
                    }

                    _ocrController.AddToDocument(PdfSettings.Language, image, ref _hDoc, sessionName);

                    if (_hDoc.Pages.Count > 0)
                    {
                        HPage page = _hDoc.Pages[_hDoc.Pages.Count - 1];
                        WriteUnderlayContent(page);
                        pageBody = pageBody + page.TextUnescaped;
                    }

                    break;
                }

                case PdfMode.TextOnly:
                {
                    _doc.NewPage();
                    _ocrController.AddToDocument(PdfSettings.Language, image, ref _hDoc, sessionName);
                    HPage page = _hDoc.Pages[_hDoc.Pages.Count - 1];
                    WriteDirectContent(page);
                    pageBody = pageBody + page.TextUnescaped;
                    break;
                }

                case PdfMode.DrawBlocks:
                {
                    _ocrController.AddToDocument(PdfSettings.Language, image, ref _hDoc, sessionName);
                    HPage page = _hDoc.Pages[_hDoc.Pages.Count - 1];
                    WritePageDrawBlocks(image, page, sessionName, dimension);
                    pageBody = pageBody + page.TextUnescaped;
                    break;
                }

                case PdfMode.Debug:

                {
                    _ocrController.AddToDocument(PdfSettings.Language, image, ref _hDoc, sessionName);
                    HPage page = _hDoc.Pages[_hDoc.Pages.Count - 1];
                    WritePageDrawBlocks(image, page, sessionName, dimension);
                    WriteDirectContent(page);
                    pageBody = pageBody + page.TextUnescaped;
                    break;
                }
                }
            }

            return(pageBody);
        }
Example #36
0
 Image[] getFrames(Image originalImg)
 {
     int numberOfFrames = originalImg.GetFrameCount(FrameDimension.Time);
     Image[] frames = new Image[numberOfFrames];
     for (int i = 0; i < numberOfFrames; i++)
     {
         originalImg.SelectActiveFrame(FrameDimension.Time, i);
         frames[i] = ((Image)originalImg.Clone());
     }
     return frames;
 }
Example #37
0
        private static void saveImageExistingMultiplePage(Image[] bmp, Image origionalFile, int PageNumber, string location)
        {
            try
            {
                //Now load the Codecs
                ImageCodecInfo codecInfo = getCodec();

                Encoder saveEncoder;
                Encoder compressionEncoder;
                EncoderParameter saveEncodeParam;
                EncoderParameter compressionEncodeParam;
                EncoderParameters encoderParams = new EncoderParameters(2);
                Bitmap pages;
                Bitmap nextPage;

                saveEncoder = Encoder.SaveFlag;
                compressionEncoder = Encoder.Compression;

                origionalFile.SelectActiveFrame(FrameDimension.Page, 0);
                pages = new Bitmap(origionalFile);
                pages = ConvertToBitonal(pages);

                // Save the first page (frame).
                saveEncodeParam = new EncoderParameter(saveEncoder, (long)EncoderValue.MultiFrame);
                compressionEncodeParam = new EncoderParameter(compressionEncoder, (long)EncoderValue.CompressionCCITT4);
                encoderParams.Param[0] = compressionEncodeParam;
                encoderParams.Param[1] = saveEncodeParam;

                pages.Save(location, codecInfo, encoderParams);

                for (int i = 1; i < PageNumber; i++)
                {
                    saveEncodeParam = new EncoderParameter(saveEncoder, (long)EncoderValue.FrameDimensionPage);
                    compressionEncodeParam = new EncoderParameter(compressionEncoder, (long)EncoderValue.CompressionCCITT4);
                    encoderParams.Param[0] = compressionEncodeParam;
                    encoderParams.Param[1] = saveEncodeParam;

                    origionalFile.SelectActiveFrame(FrameDimension.Page, i);
                    nextPage = new Bitmap(origionalFile);
                    nextPage = ConvertToBitonal(nextPage);
                    pages.SaveAdd(nextPage, encoderParams);
                }

                for (int i = 0; i < bmp.Length; i++)
                {
                    saveEncodeParam = new EncoderParameter(saveEncoder, (long)EncoderValue.FrameDimensionPage);
                    compressionEncodeParam = new EncoderParameter(compressionEncoder, (long)EncoderValue.CompressionCCITT4);
                    encoderParams.Param[0] = compressionEncodeParam;
                    encoderParams.Param[1] = saveEncodeParam;
                    bmp[i] = (Bitmap)ConvertToBitonal((Bitmap)bmp[i]);
                    pages.SaveAdd(bmp[i], encoderParams);
                }

                saveEncodeParam = new EncoderParameter(saveEncoder, (long)EncoderValue.Flush);
                encoderParams.Param[0] = saveEncodeParam;
                pages.SaveAdd(encoderParams);
            }
            catch (System.Exception ee)
            {
                throw ee;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="image"></param>
        private void LoadFrames(Image image)
        {
            int framesCount = image.GetFrameCount(FrameDimension.Time);
            if (framesCount <= 1)
            {
                throw new ArgumentException("Image not animated");
            }
            byte[] times = image.GetPropertyItem(0x5100).Value;
            int frame = 0;
            List<AnimationGifFrame> frames = new List<AnimationGifFrame>();
            while (true)
            {
                int dur = BitConverter.ToInt32(times, 4 * frame) * 10;
                frames.Add(new AnimationGifFrame(new Bitmap(image), dur));
                if (++frame >= framesCount)
                    break;

                image.SelectActiveFrame(FrameDimension.Time, frame);
            }
            this._frames = frames.ToArray();
        }
    /*/// <summary>
    /// This method converts the read in byte arry to a System.Drawing.Bitmap
    /// </summary>
    /// <param name="data"> the byte array to be convereted</param>
    /// <returns></returns>
    public System.Drawing.Bitmap byteArrayToBitMap(byte[] data){
       System.Drawing.Bitmap bmp;

       System.Drawing.ImageConverter ic = new System.Drawing.ImageConverter();
       bmp = (System.Drawing.Bitmap)ic.ConvertFrom(data);
       //Debug.Log("Converted byteArray to bit map");
       return bmp;

       }*/
    /*
    public void byteArrayToTexture2D(byte[] data)
    {
        int width = data[6];
        int height = data[8];
        Debug.Log("Width: " + width + " Height: " + height);
        Texture2D bmp = new Texture2D(width, height);
        bmp.LoadRawTextureData(data);
        myRawImage.texture = bmp;
    }*/
    /// <summary>
    /// This handles loading all fo the data from the given url and converts it into a readable image type and then allows the OnGUI function to draw the gif
    /// </summary>
    public void loadImage()
    {
        //Debug.Log("Called Load Image BACK");
        gifImage = ByteArrayToImage(www.bytes);

        if (gifImage == null)
            return;

        isGif = true;

        var dimension = new System.Drawing.Imaging.FrameDimension(gifImage.FrameDimensionsList[0]);
        int frameCount = gifImage.GetFrameCount(dimension);
        Debug.Log("Dimensions: Frames: " + frameCount + " Width: " + gifImage.Width + " Height: " + gifImage.Height + " Pixels: " + (gifImage.Width * gifImage.Height));
        int width = 0;
        int height = 0;

        for (int i = 0; i < frameCount; i++)
        {
            gifImage.SelectActiveFrame(dimension, i);
            var frame = new System.Drawing.Bitmap(gifImage.Width, gifImage.Height);

            System.Drawing.Graphics.FromImage(frame).DrawImage(gifImage, Point.Empty);

            Texture2D frameTexture = new Texture2D(frame.Width, frame.Height);
            for (int x = 0; x < frame.Width; x++)
                for (int y = 0; y < frame.Height; y++)
                {
                    System.Drawing.Color sourceColor = frame.GetPixel(x, y);
                    frameTexture.SetPixel(frame.Width + x + 1, -y, new Color32(sourceColor.R, sourceColor.G, sourceColor.B, sourceColor.A)); // for some reason, x is flipped
                }
            frameTexture.Apply();
            gifFrames.Add(frameTexture);
            width = frame.Width;
            height = frame.Height;
        }
        byteArrayTextConversion(bytearrayholder);
        //Debug.Log("Starting ON GUI!");
        canOnGUI = true;
    }
Example #40
0
        public static Image GetPage(Image image, int i)
        {
            Guid objGuid = image.FrameDimensionsList[0];
            FrameDimension objDimension = new FrameDimension(objGuid);

            image.SelectActiveFrame(objDimension, i);

            MemoryStream ms = new MemoryStream();
            image.Save(ms, ImageFormat.Bmp);

            Image pageImage = Image.FromStream(ms);
            return pageImage;
        }
Example #41
0
 private Image[] TrySplitImage(Image master)
 {
     var dimension = new FrameDimension(master.FrameDimensionsList[0]);
     var images = new Image[master.GetFrameCount(dimension)];
     for (var i = 0; i < images.Length; i++) {
         master.SelectActiveFrame(dimension, i);
         images[i] = new Bitmap(master);
     }
     return images;
 }
Example #42
0
        /// <summary>
        /// Checks and restores an animated GIF.
        /// </summary>
        /// <param name="image">The image.</param>
        /// <remarks>Documented by Dev03, 2008-03-21</remarks>
        private void CheckAndRestoreGIF(ref Image image)
        {
            if (!image.RawFormat.Guid.Equals(ImageFormat.Gif.Guid))
                return;

            List<int> badframeIndexes = new List<int>();
            int count = 0;

            count = image.GetFrameCount(FrameDimension.Time);

            if (count > 1)
            {
                //string fn = Path.GetTempFileName();
                //image.Save(fn);
                //image = Image.FromFile(fn);

                //MemoryStream str = new MemoryStream();
                //image.Save(str, ImageFormat.Gif);
                //str.Seek(0, SeekOrigin.Begin);
                //image = Image.FromStream(str);
            }

            for (int i = 0; i < count; i++)
            {
                try
                {
                    image.SelectActiveFrame(FrameDimension.Time, i);
                }
                catch
                {
                    badframeIndexes.Add(i);
                }
            }
            if (badframeIndexes.Count > 0)
            {
                string indexes = String.Empty;
                for (int i = 0; i < badframeIndexes.Count; i++)
                {
                    indexes += badframeIndexes[i].ToString() + ",";
                }
                indexes = indexes.Substring(0, indexes.Length - 1);
                System.Diagnostics.Debug.Write("Frames No." + indexes + " are damaged!");
            }
            else
            {
                return;
            }

            if ((badframeIndexes.Count) > 0 && (badframeIndexes.Count < count))
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    EncoderParameters encoderpara = new EncoderParameters(1);

                    for (int i = 0; i < count; i++)
                    {
                        if (!badframeIndexes.Contains(i))
                        {
                            image.SelectActiveFrame(FrameDimension.Time, i);
                            image.Save(stream, ImageFormat.Png);
                            break;
                        }
                    }
                    image = Bitmap.FromStream(stream);
                }
            }
        }
    public void loadImage()
    {
        gifImage = ByteArrayToImage(www.bytes);

        if (gifImage == null)
            return;
        debugText.text = "Creating Image";
        var dimension = new System.Drawing.Imaging.FrameDimension(gifImage.FrameDimensionsList[0]);
        int frameCount = gifImage.GetFrameCount(dimension);
        for (int i = 0; i < frameCount; i++)
        {
            gifImage.SelectActiveFrame(dimension, i);
            var frame = new System.Drawing.Bitmap(gifImage.Width, gifImage.Height);
            System.Drawing.Graphics.FromImage(frame).DrawImage(gifImage, System.Drawing.Point.Empty);
            Texture2D frameTexture = new Texture2D(frame.Width, frame.Height);

            //Debug.logger.Log("width: " + frame.Width + " height: " + frame.Height + " frame count: " + frameCount + " total: " + (frame.Width * frame.Height * frameCount));
            for (int x = 0; x < frame.Width; x++)
                for (int y = 0; y < frame.Height; y++)
                {
                    System.Drawing.Color sourceColor = frame.GetPixel(x, y);
                    frameTexture.SetPixel(frame.Width - 1 + x, -y, new Color32(sourceColor.R, sourceColor.G, sourceColor.B, sourceColor.A)); // for some reason, x is flipped
                }
            frameTexture.Apply();
            gifFrames.Add(frameTexture);
        }
        debugText.text = "Created Image";
        canOnGUI = true;
    }
Example #44
0
        public Image getTiffImage(Image sourceImage, int pageNumber)
        {
            MemoryStream ms = null;
            Image returnImage = null;

            try
            {
                ms = new MemoryStream();
                Guid objGuid = sourceImage.FrameDimensionsList[0];
                FrameDimension objDimension = new FrameDimension(objGuid);
                sourceImage.SelectActiveFrame(objDimension, pageNumber);
                sourceImage.Save(ms, ImageFormat.Tiff);
                returnImage = Image.FromStream(ms);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                ms.Close();
            }

            return returnImage;
        }
Example #45
0
        //Bonus. A simple check on the GIF files because some may contain "bad" data and crash the program.
        public static bool isImageCorrupted(Image img)
        {
            bool itis = false;

            try
            {
                if (!ImageAnimator.CanAnimate(img))
                {
                    return itis;
                }
                int frames = img.GetFrameCount(System.Drawing.Imaging.FrameDimension.Time);
                if (frames <= 1)
                {
                    return itis;
                }
                byte[] times = img.GetPropertyItem(0x5100).Value;
                int frame = 0;
                for (; ; )
                {
                    int dur = BitConverter.ToInt32(times, 4 * frame);
                    if (++frame >= frames) break;
                    img.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Time, frame);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }

            return itis;
        }
Example #46
0
 public static Image selectLargestPage( Image img )
 {
     if ( img==null )
         return null;
     int nLargestIndex = 0;
     int nLargestSize = 0;
     int nCount = img.GetFrameCount( FrameDimension.Page );
     if ( nCount==1 )
         return img;
     for ( var i=0 ; i<nCount ; i++ )
     {
         img.SelectActiveFrame( FrameDimension.Page, i );
         if ( img.Size.Width > nLargestSize )
         {
             nLargestSize = img.Size.Width;
             nLargestIndex = i;
         }
     }
     img.SelectActiveFrame( FrameDimension.Page, nLargestIndex );
     return img;
 }
Example #47
0
        private static void TiffCompress(string SourcePath)
        {
            System.Drawing.Image image = null;
            try
            {
                var DocOutputMemStream = new MemoryStream();
                image = System.Drawing.Image.FromFile(SourcePath);
                var PageCount = image.GetFrameCount(FrameDimension.Page);


                //Tiff
                ImageCodecInfo myImageCodecInfo;
                System.Drawing.Imaging.Encoder myEncoder;
                EncoderParameter  myEncoderParameter;
                EncoderParameters myEncoderParameters;

                myImageCodecInfo    = ImageCodecInfo.GetImageEncoders().First(k => k.MimeType == "image/tiff");
                myEncoder           = System.Drawing.Imaging.Encoder.Compression;
                myEncoderParameters = new EncoderParameters(2);

                myEncoderParameter           = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionCCITT4);
                myEncoderParameters.Param[0] = myEncoderParameter;
                //End tiff

                PageCount = 3;

                for (int index = 0; index < PageCount; index++)
                {
                    image.SelectActiveFrame(FrameDimension.Page, index);

                    //Threshold
                    System.Drawing.Image frame = image;

                    if (index == 0)
                    {
                        // Initialize the first frame of multipage tiff.
                        myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
                        frame.Save(DocOutputMemStream, myImageCodecInfo, myEncoderParameters);
                    }
                    else
                    {
                        // Add additional frames.
                        myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
                        frame.SaveAdd(frame, myEncoderParameters);
                    }

                    if (index == PageCount - 1)
                    {
                        // When it is the last frame, flush the resources and closing.
                        myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush);
                        frame.SaveAdd(myEncoderParameters);
                    }
                }

                //image.Save(@"D:\ENADOC\Sample docs\TIFF\Sample2.tiff");
                File.WriteAllBytes(@"D:\ENADOC\Sample docs\TIFF\Sample2.tiff", DocOutputMemStream.ToArray());
                image.Dispose();
            }
            catch (Exception ex)
            {
            }
        }
Example #48
0
        private void displayFrame()
        {
            _objImage = System.Drawing.Image.FromFile(_strFilePath);
            Guid objGuid = _objImage.FrameDimensionsList[0];
            System.Drawing.Imaging.FrameDimension objDimension = new System.Drawing.Imaging.FrameDimension(objGuid);
            _objImage.SelectActiveFrame(objDimension, _curF);
            picImage.Image = _objImage;
            //picImage.ScaleImage = Infragistics.Win.ScaleImage.OnlyWhenNeeded;
            picImage.SizeMode = PictureBoxSizeMode.StretchImage;

            _cboFrameNo.ToolValueChanged -= new Infragistics.Win.UltraWinToolbars.ToolEventHandler(_cboFrameNo_ToolValueChanged);
            _cboFrameNo.SelectedIndex = _curF;
            _cboFrameNo.ToolValueChanged += new Infragistics.Win.UltraWinToolbars.ToolEventHandler(_cboFrameNo_ToolValueChanged);
        }
Example #49
0
    /// <summary>
    /// 加缩略图同时加水印
    /// </summary>
    /// <param name="upFile"></param>
    /// <param name="_picWidth"></param>
    /// <param name="_picHeight"></param>
    /// <param name="fileSize"></param>
    /// <param name="filePath"></param>
    /// <param name="serverPath"></param>
    /// <returns></returns>
    private static string UpPhoto(FileUpload upFile, int _picWidth, int _picHeight, int fileSize, string filePath, string serverPath)
    {
        string strFullName      = upFile.PostedFile.FileName;
        string strWaterFullName = serverPath + waterImagePath;
        int    size             = upFile.PostedFile.ContentLength;
        int    j        = strFullName.LastIndexOf("\\") + 1;
        string fileName = strFullName.Substring(j);
        int    a        = fileName.LastIndexOf(".") + 1;
        string typeName = fileName.Substring(a).ToUpper();
        //让系统的时间作为图片的名称
        string name = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() +
                      System.DateTime.Now.Hour.ToString() + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Millisecond.ToString();
        //保存的文件路径和名称
        string picPath         = serverPath + "/" + filePath + name + ".jpg";
        string newPath         = "";
        string smallPicPath    = "";
        string picRelativePath = "";

        if (typeName == "GIF" || typeName == "JPG" || typeName == "PNG" || typeName == "BMP")
        {
            if (fileSize > size)
            {
                //先把文件提交到服务器
                upFile.SaveAs(picPath);
                smallPicPath = serverPath + "/" + filePath + "smallphoto/" + name + ".jpg";

                //对图片进行缩略
                double picWidth  = Convert.ToDouble(_picWidth);
                double picHeight = Convert.ToDouble(_picHeight);

                System.Drawing.Image im = System.Drawing.Image.FromStream(upFile.PostedFile.InputStream);
                double height           = Convert.ToDouble(im.Height);
                double width            = Convert.ToDouble(im.Width);
                int    suoluetuHeight   = 0;
                int    suoluetuWidth    = 0;
                double beishuHeight     = 1;
                double beishuWidth      = 1;
                if (height > picHeight)
                {
                    beishuHeight = height / picHeight;
                }
                else
                {
                    suoluetuHeight = Convert.ToInt16(height);
                }

                if (width > picWidth)
                {
                    beishuWidth = width / picWidth;
                }
                else
                {
                    suoluetuWidth = Convert.ToInt16(width);
                }

                if (height > width)
                {
                    suoluetuHeight = Convert.ToInt16(height / beishuHeight);
                    suoluetuWidth  = Convert.ToInt16(width / beishuHeight);
                }
                else
                {
                    suoluetuHeight = Convert.ToInt16(height / beishuWidth);
                    suoluetuWidth  = Convert.ToInt16(width / beishuWidth);
                }
                System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
                Bitmap myBitmap = new Bitmap(picPath);

                System.Drawing.Image myThumbnail = myBitmap.GetThumbnailImage(suoluetuWidth, suoluetuHeight, myCallback, IntPtr.Zero);
                //将图像保存到页面输出流中,并制定输出图像的格式

                myThumbnail.Save(smallPicPath, System.Drawing.Imaging.ImageFormat.Jpeg);

                myBitmap.Dispose();

                //首先给大图图片添加水印------------------------------------------------------------------------------

                //创建一个图像对象
                System.Drawing.Image image = System.Drawing.Image.FromFile(picPath);
                //水印图片
                System.Drawing.Image waterImage = System.Drawing.Image.FromFile(strWaterFullName);

                //Create   a   new   FrameDimension   object   from   this   image

                FrameDimension ImgFrmDim = new FrameDimension(image.FrameDimensionsList[0]);

                int nFrameCount = image.GetFrameCount(ImgFrmDim);

                //   Save   every   frame   into   jpeg   format

                for (int i = 0; i < nFrameCount; i++)
                {
                    image.SelectActiveFrame(ImgFrmDim, i);

                    image.Save(string.Format(serverPath + "/" + filePath + "Frame{0}.jpg ", i), ImageFormat.Jpeg);
                }
                image.Dispose();

                for (int i = 0; i < nFrameCount; i++)
                {
                    string pa = serverPath + "/" + filePath + "Frame" + i + ".jpg ";
                    System.Drawing.Image Image = System.Drawing.Image.FromFile(pa);
                    Graphics             g     = Graphics.FromImage(Image);
                    g.DrawImage(waterImage, new Rectangle(Image.Width - waterImage.Width, Image.Height - waterImage.Height, waterImage.Width, waterImage.Height), 0, 0, waterImage.Width, waterImage.Height, GraphicsUnit.Pixel);

                    g.Dispose();

                    newPath         = serverPath + "/" + filePath + name + i.ToString() + "." + "jpg ";
                    picRelativePath = filePath + name + i.ToString() + "." + "jpg ";
                    Image.Save(newPath);
                    Image.Dispose();

                    if (File.Exists(pa))
                    {
                        File.Delete(pa);
                    }
                }
                if (File.Exists(picPath))
                {
                    File.Delete(picPath);
                }

                //然后给小图加水印----------------------------------------------------------------------------------
                strWaterFullName = serverPath + waterImagePath;
                System.Drawing.Image smallimage = System.Drawing.Image.FromFile(smallPicPath);

                //水印图片
                System.Drawing.Image smallwaterImage = System.Drawing.Image.FromFile(strWaterFullName);

                //Create   a   new   FrameDimension   object   from   this   image

                FrameDimension ImgFrmDimSmall = new FrameDimension(smallimage.FrameDimensionsList[0]);

                nFrameCount = smallimage.GetFrameCount(ImgFrmDimSmall);

                //   Save   every   frame   into   jpeg   format

                for (int i = 0; i < nFrameCount; i++)
                {
                    smallimage.SelectActiveFrame(ImgFrmDimSmall, i);

                    smallimage.Save(string.Format(serverPath + "/" + filePath + "smallphoto/" + "Frame{0}.jpg ", i), ImageFormat.Jpeg);
                }
                smallimage.Dispose();

                for (int i = 0; i < nFrameCount; i++)
                {
                    string pa = serverPath + "/" + filePath + "smallphoto/" + "Frame" + i + ".jpg ";
                    System.Drawing.Image Image = System.Drawing.Image.FromFile(pa);
                    Graphics             g     = Graphics.FromImage(Image);
                    g.DrawImage(smallwaterImage, new Rectangle(Image.Width - smallwaterImage.Width, Image.Height - smallwaterImage.Height, smallwaterImage.Width, smallwaterImage.Height), 0, 0, smallwaterImage.Width, smallwaterImage.Height, GraphicsUnit.Pixel);

                    g.Dispose();

                    newPath = serverPath + "/" + filePath + "smallphoto/" + name + i.ToString() + "." + "jpg ";
                    Image.Save(newPath);
                    Image.Dispose();

                    if (File.Exists(pa))
                    {
                        File.Delete(pa);
                    }
                }

                if (File.Exists(smallPicPath))
                {
                    File.Delete(smallPicPath);
                }
            }
        }
        return(picRelativePath);
    }
Example #50
0
        /// <summary>
        /// Merge one or more image or document files into a single PDF
        /// Supported Formats: bmp, gif, jpg, jpeg, png, tif, tiff, pdf (including multi-page tiff and pdf files)
        /// Original code: https://www.ryadel.com/en/merge-multiple-gif-png-jpg-pdf-image-files-single-pdf-file-asp-net-c-sharp-core-itextsharp/
        /// </summary>
        public bool MergeIntoPDF(string outputPdfFile, bool replace = false, params ByteArrayInfo[] infoArray)
        {
            _lasterror      = "";
            _laststacktrace = "";

            // If output file exists and not replacing, bail out.
            if (File.Exists(outputPdfFile))
            {
                if (!replace)
                {
                    throw new Exception(String.Format("Output PDF file {0} already exists and replace not selected. Process cancelled.", outputPdfFile));
                }
                else
                {
                    File.Delete(outputPdfFile);
                }
            }

            // If we do have a single PDF file, write out the original file data without doing anything
            if (infoArray.Length == 1 && infoArray[0].FileExtension.Trim('.').ToLower() == "pdf")
            {
                File.WriteAllBytes(outputPdfFile, infoArray[0].Data);
                return(true);
            }

            // patch to fix the "PdfReader not opened with owner password" error.
            // ref.: https://stackoverflow.com/questions/17691013/pdfreader-not-opened-with-owner-password-error-in-itext
            PdfReader.unethicalreading = true;

            using (Document doc = new Document())
            {
                doc.SetPageSize(PageSize.LETTER);

                using (var ms = new MemoryStream())
                {
                    // PdfWriter wri = PdfWriter.GetInstance(doc, ms);
                    using (PdfCopy pdf = new PdfCopy(doc, ms))
                    {
                        doc.Open();

                        foreach (ByteArrayInfo info in infoArray)
                        {
                            try
                            {
                                doc.NewPage();
                                Document  imageDocument       = null;
                                PdfWriter imageDocumentWriter = null;
                                switch (info.FileExtension.Trim('.').ToLower())
                                {
                                case "bmp":
                                case "gif":
                                case "jpg":
                                case "jpeg":
                                case "png":
                                    using (imageDocument = new Document())
                                    {
                                        using (var imageMS = new MemoryStream())
                                        {
                                            using (imageDocumentWriter = PdfWriter.GetInstance(imageDocument, imageMS))
                                            {
                                                imageDocument.Open();
                                                if (imageDocument.NewPage())
                                                {
                                                    var image = iTextSharp.text.Image.GetInstance(info.Data);
                                                    image.Alignment = Element.ALIGN_CENTER;
                                                    image.ScaleToFit(doc.PageSize.Width - 10, doc.PageSize.Height - 10);
                                                    if (!imageDocument.Add(image))
                                                    {
                                                        throw new Exception("Unable to add image to page!");
                                                    }
                                                    imageDocument.Close();
                                                    imageDocumentWriter.Close();
                                                    using (PdfReader imageDocumentReader = new PdfReader(imageMS.ToArray()))
                                                    {
                                                        var page = pdf.GetImportedPage(imageDocumentReader, 1);
                                                        pdf.AddPage(page);
                                                        imageDocumentReader.Close();
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    break;

                                case "tif":
                                case "tiff":
                                    //Get the frame dimension list from the image of the file
                                    using (var imageStream = new MemoryStream(info.Data))
                                    {
                                        using (System.Drawing.Image tiffImage = System.Drawing.Image.FromStream(imageStream))
                                        {
                                            //get the globally unique identifier (GUID)
                                            Guid objGuid = tiffImage.FrameDimensionsList[0];
                                            //create the frame dimension
                                            FrameDimension dimension = new FrameDimension(objGuid);
                                            //Gets the total number of frames in the .tiff file
                                            int noOfPages = tiffImage.GetFrameCount(dimension);

                                            //get the codec for tiff files
                                            ImageCodecInfo ici = null;
                                            foreach (ImageCodecInfo i in ImageCodecInfo.GetImageEncoders())
                                            {
                                                if (i.MimeType == "image/tiff")
                                                {
                                                    ici = i;
                                                }
                                            }

                                            foreach (Guid guid in tiffImage.FrameDimensionsList)
                                            {
                                                for (int index = 0; index < noOfPages; index++)
                                                {
                                                    FrameDimension currentFrame = new FrameDimension(guid);
                                                    tiffImage.SelectActiveFrame(currentFrame, index);
                                                    using (MemoryStream tempImg = new MemoryStream())
                                                    {
                                                        //var encoder = new TiffBitmapEncoder();
                                                        //encoder.Compression = TiffCompressOption.Zip;
                                                        //encoder.Frames.Add(BitmapFrame.Create(image));
                                                        //encoder.Save(stream);
                                                        // Encoder parameters for CCITT G4
                                                        //EncoderParameters eps = new EncoderParameters(1);
                                                        //eps.Param[0] = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
                                                        //tiffImage.Save(tempImg,ImageCodecInfo.GetImageEncoders( ImageFormat.Tiff,eps);
                                                        // Original code saved as TIFF before adding to PDF. PNG is smaller
                                                        //tiffImage.Save(tempImg, ImageFormat.Tiff);

                                                        // Save image as PNG before writing to Ong file. Png format is smaller
                                                        tiffImage.Save(tempImg, ImageFormat.Png);
                                                        using (imageDocument = new Document())
                                                        {
                                                            using (var imageMS = new MemoryStream())
                                                            {
                                                                using (imageDocumentWriter = PdfWriter.GetInstance(imageDocument, imageMS))
                                                                {
                                                                    imageDocument.Open();
                                                                    if (imageDocument.NewPage())
                                                                    {
                                                                        var image = iTextSharp.text.Image.GetInstance(tempImg.ToArray());
                                                                        //image.CompressionLevel = Element.CCITTG4;
                                                                        // Set image DPI
                                                                        //image.SetDpi(100,100);
                                                                        image.Alignment = Element.ALIGN_CENTER;
                                                                        image.ScaleToFit(doc.PageSize.Width - 10, doc.PageSize.Height - 10);
                                                                        if (!imageDocument.Add(image))
                                                                        {
                                                                            throw new Exception("Unable to add image to page!");
                                                                        }
                                                                        imageDocument.Close();
                                                                        imageDocumentWriter.Close();
                                                                        using (PdfReader imageDocumentReader = new PdfReader(imageMS.ToArray()))
                                                                        {
                                                                            var page = pdf.GetImportedPage(imageDocumentReader, 1);
                                                                            pdf.AddPage(page);
                                                                            imageDocumentReader.Close();
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    break;

                                case "pdf":
                                    using (var reader = new PdfReader(info.Data))
                                    {
                                        for (int i = 0; i < reader.NumberOfPages; i++)
                                        {
                                            pdf.AddPage(pdf.GetImportedPage(reader, i + 1));
                                        }
                                        pdf.FreeReader(reader);
                                        reader.Close();
                                    }
                                    break;

                                default:
                                    // not supported image format:
                                    // skip it (or throw an exception if you prefer)
                                    throw new Exception(String.Format("Unsupported image format for file {0}", info.FileName));
                                }
                            }
                            catch (Exception e)
                            {
                                e.Data["FileName"] = info.FileName;
                                _lasterror         = e.Message;
                                _laststacktrace    = e.StackTrace;
                                return(false);
                            }
                        }
                        if (doc.IsOpen())
                        {
                            doc.Close();
                        }

                        //  Write output to the new consolidated PDF file
                        File.WriteAllBytes(outputPdfFile, ms.GetBuffer());
                        return(true);
                    }
                }
            }
        }
Example #51
0
        /// <summary>
        /// Gets the frame at the specified index.
        /// </summary>
        /// <param name="image">The image.</param>
        /// <param name="index">The index.</param>
        /// <returns>
        /// The <see cref="GifFrame"/>.
        /// </returns>
        public GifFrame GetFrame(Image image, int index)
        {
            // Find the frame
            image.SelectActiveFrame(FrameDimension.Time, index);
            Bitmap frame = new Bitmap(image);
            frame.SetResolution(image.HorizontalResolution, image.VerticalResolution);

            // Reset the image
            image.SelectActiveFrame(FrameDimension.Time, 0);

            // Get the times stored in the gif.
            byte[] times = image.GetPropertyItem((int)ExifPropertyTag.FrameDelay).Value;

            // Convert each 4-byte chunk into an integer.
            // GDI returns a single array with all delays, while Mono returns a different array for each frame.
            TimeSpan delay = TimeSpan.FromMilliseconds(BitConverter.ToInt32(times, (4 * index) % times.Length) * 10);

            return new GifFrame { Delay = delay, Image = frame };
        }
Example #52
0
        // this method avoid checks that aren't requied for UpdateFrames()
        private static void UpdateImageFrame(Image image)
        {
            AnimateEventArgs aea = (AnimateEventArgs)ht[image] !;

            image.SelectActiveFrame(FrameDimension.Time, aea.GetNextFrame());
        }
Example #53
0
    /// <summary>
    /// 上传加水印图片
    /// </summary>
    /// <param name="upFile"></param>
    /// <param name="fileSize"></param>
    /// <param name="filePaht"></param>
    /// <param name="serverPath"></param>
    /// <returns></returns>
    private static string UploadAddWaterImage(FileUpload upFile, int fileSize, string filePath, string serverPath)
    {
        string strFullName      = upFile.PostedFile.FileName;
        string strWaterFullName = serverPath + waterImagePath;
        int    size             = upFile.PostedFile.ContentLength;
        int    j        = strFullName.LastIndexOf("\\") + 1;
        string fileName = strFullName.Substring(j);
        int    a        = fileName.LastIndexOf(".") + 1;
        string typeName = fileName.Substring(a).ToUpper();
        //让系统的时间作为图片的名称
        string name = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() +
                      System.DateTime.Now.Hour.ToString() + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Millisecond.ToString();
        //保存的文件路径和名称
        string picPath         = serverPath + "/" + filePath + name + ".jpg";
        string newPath         = "";
        string picRelativePath = "";

        if (typeName == "GIF" || typeName == "JPG" || typeName == "PNG" || typeName == "BMP")
        {
            if (fileSize > size)
            {
                //先把文件提交到服务器
                upFile.SaveAs(picPath);

                //加文字水印,注意,这里的代码和以下加图片水印的代码不能共存
                //System.Drawing.Image image = System.Drawing.Image.FromFile(path);
                //Graphics g = Graphics.FromImage(image);
                //g.DrawImage(image, 0, 0, image.Width, image.Height);
                //Font f = new Font("Verdana", 32);
                //Brush b = new SolidBrush(Color.White);
                //string addText = AddText.Value.Trim();
                //g.DrawString(addText, f, b, 10, 10);
                //g.Dispose();

                //首先给图片添加水印

                System.Drawing.Image.GetThumbnailImageAbort myCallback =
                    new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);

                //创建一个图像对象
                //Bitmap bmp = new Bitmap(picPath);

                System.Drawing.Image image = System.Drawing.Image.FromFile(picPath);

                //水印图片
                System.Drawing.Image waterImage = System.Drawing.Image.FromFile(strWaterFullName);

                //Create   a   new   FrameDimension   object   from   this   image

                FrameDimension ImgFrmDim = new FrameDimension(image.FrameDimensionsList[0]);

                int nFrameCount = image.GetFrameCount(ImgFrmDim);

                //   Save   every   frame   into   jpeg   format

                for (int i = 0; i < nFrameCount; i++)
                {
                    image.SelectActiveFrame(ImgFrmDim, i);

                    image.Save(string.Format(serverPath + "/" + filePath + "Frame{0}.jpg ", i), ImageFormat.Jpeg);
                }
                image.Dispose();

                for (int i = 0; i < nFrameCount; i++)
                {
                    string pa = serverPath + "/" + filePath + "Frame" + i + ".jpg ";
                    System.Drawing.Image Image = System.Drawing.Image.FromFile(pa);
                    Graphics             g     = Graphics.FromImage(Image);
                    g.DrawImage(waterImage, new Rectangle(Image.Width - waterImage.Width, Image.Height - waterImage.Height, waterImage.Width, waterImage.Height), 0, 0, waterImage.Width, waterImage.Height, GraphicsUnit.Pixel);
                    g.Dispose();

                    newPath = serverPath + "/" + filePath + name + i.ToString() + "." + typeName.ToLower();
                    Image.Save(newPath);
                    picRelativePath = filePath + name + i.ToString() + "." + typeName.ToLower();
                    Image.Dispose();

                    if (File.Exists(pa))
                    {
                        File.Delete(pa);
                    }
                }


                if (File.Exists(picPath))
                {
                    File.Delete(picPath);
                }
            }
        }
        return(picRelativePath);
    }