To view the image per page on PictureBox or any picture control tool, get
its frame example
| image.SelectActiveFrame(frameDim, Pages[i]; |
|
using System; using System.Collections.Generic; using System.Text; using System.Drawing.Imaging; using System.IO; using System.Drawing; using System.Text.RegularExpressions; using System.Collections; using System.ComponentModel; using System.Runtime.InteropServices; namespace DocImageUtility { public class TIFManager { private string TIFF_CODEC = "image/tiff"; private long ENCODING_SCHEME = (long)EncoderValue.CompressionCCITT4; public string SelectedPages { get; set; } public int NumberOfPages { get; set; } public string FilePath { get; set; } public bool newfile = true; public bool newdocument = true; Image Document; EncoderParameters encoderParams; public int SelectedPageCount { get { return Pages.Length; } } //First method to call in order to load the file and get its contents and pages public void Load(string path) { this.FilePath = path; //Get the frame dimension list from the image of the file and Image tiffImage = Image.FromFile(path); //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 NumberOfPages = tiffImage.GetFrameCount(dimension); tiffImage.Dispose(); } //Split Method public void Split(string splittedFileName) { //Get its file information ImageCodecInfo codecInfo = GetCodecInfo(TIFF_CODEC); EncoderParameters encoderParams = new EncoderParameters(2); encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame); encoderParams.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, ENCODING_SCHEME); //Load the Document FileStream fs = new FileStream(this.FilePath, FileMode.OpenOrCreate); Image image = Image.FromStream(fs); //Get file frame/pages FrameDimension frameDim = new FrameDimension(image.FrameDimensionsList[0]); //Check if selected pages is null or 0 value if (SelectedPages != null) { // Delete / Overwrite existing file if updating Splitted Image File var file = new FileInfo(splittedFileName); if (file.Exists) file.Delete(); //for each frame/pages create the new document for (int i = 0; i < Pages.Length; i++) { //check whether selected pages is not greater than the file pages if (Pages.Length >= (i + 1)) { //Selected image frame image.SelectActiveFrame(frameDim, Pages[i]); //check whether file is new document if (newfile == true) { image.Save(splittedFileName, codecInfo, encoderParams); newfile = false; } else //append the document depending on the selected frame from the original image { encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage); image.SaveAdd(image, encoderParams); } } } fs.Close(); } } //Merge Method public void Merge(string MergeFileName, string source) { //Set its Image Format as TIFF ImageCodecInfo codecInfo = GetCodecInfo(TIFF_CODEC); //Load the Document FileStream fs = new FileStream(source, FileMode.OpenOrCreate); Image image = Image.FromStream(fs); //Get file frame/pages FrameDimension frameDim = new FrameDimension(image.FrameDimensionsList[0]); if (newdocument == true) { //Set its Image Type encoderParams = new EncoderParameters(2); encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame); encoderParams.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, ENCODING_SCHEME); //Check if selected pages is null or 0 value if (SelectedPages != null) { //for each frame/pages create the new document for (int i = 0; i < image.GetFrameCount(frameDim); i++) { //check whether selected pages is not greater than the file pages if (Pages.Length >= (i + 1)) { //Selected image frame image.SelectActiveFrame(frameDim, Pages[i]); //check whether file is new document if (newfile == true) { //create new filename Document = image; //save Document.Save(MergeFileName, codecInfo, encoderParams); encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage); newfile = false; newdocument = false; } else { //append the document depending on the selected frame from the original image Document.SaveAdd(image, encoderParams); } } } fs.Close(); } } else { //Check if selected pages is null or 0 value if (SelectedPages != null) { //for each frame/pages create the new document for (int i = 0; i < image.GetFrameCount(frameDim); i++) { //check whether selected pages is not greater than the file pages if (Pages.Length >= (i + 1)) { //Selected image frame image.SelectActiveFrame(frameDim, Pages[i]); //check whether file is new document //append the document depending on the selected frame from the original image Document.SaveAdd(image, encoderParams); } } fs.Close(); } } } //Check whether selected pages is valid public int[] Pages { get { ArrayList ps = new ArrayList(); string[] ss = SelectedPages.Split(new char[] { ',', ' ', ';' }); foreach (string s in ss) if (Regex.IsMatch(s, @"\d+-\d+")) { int start = int.Parse(s.Split(new char[] { '-' })[0]); int end = int.Parse(s.Split(new char[] { '-' })[1]); if (start > end) return new int[] { 0 }; while (start <= end) { ps.Add(start - 1); start++; } } else { int i; int.TryParse(s, out i); if (i > 0) ps.Add(int.Parse(s) - 1); } return ps.ToArray(typeof(int)) as int[]; } } private ImageCodecInfo GetCodecInfo(string codec) { ImageCodecInfo codecInfo = null; foreach (ImageCodecInfo info in ImageCodecInfo.GetImageEncoders()) { if (info.MimeType == codec) { codecInfo = info; break; } } return codecInfo; } } } |

Reza NabilooPosted Jan 23, 2018, 7:27 AM
Hi. thanks for your code . but i don't know how to use this. i'm beginner in c#