![]() | |
![]() |
| | Thread Tools | Search this Thread | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
I have a small application that reads a multipage TIFF (thanks Bob Powell!) and then simply rewrites the pages to a new TIFF file. It doesn't do anything to it except extract the pages and then reassemble them into a new file. The problem is that the new file is 778kb and the old file was only 58kb. In addition, the new images are rotated 90 degrees and occupies only the left half of the page. The code I use to extract the images is: Dim fs As FileStream = File.Open(f, FileMode.Open, FileAccess.Read) Dim bm As Bitmap = CType(Bitmap.FromStream(fs), Bitmap) If bm.GetFrameCount(FrameDimension.Page) > 1 Then Dim i As Integer For i = 0 To (bm.GetFrameCount(FrameDimension.Page)) - 1 bm.SelectActiveFrame(FrameDimension.Page, i) Dim temp As New Bitmap(bm.Width, bm.Height) Dim g As Graphics = Graphics.FromImage(temp) g.InterpolationMode = InterpolationMode.NearestNeighbor g.DrawImageUnscaled(bm, 0, 0) g.Dispose() AddFrameToList(temp, -1) Next i Else AddFrameToList(bm, 0) End If fs.Close() bm.Dispose() The code to reassemble them into a new image is: If L.Count > 1 Then 'the first item in the list is the master frame. Dim ii As ImageItem = CType(L(0), ImageItem) Dim MasterBitmap As Bitmap = CType(ii.Image, Bitmap) Dim f2 As String = Path.GetDirectoryName(f) + "\Processing.tmp" 'Select the image encoder Dim enc As Encoder = Encoder.SaveFlag Dim info As ImageCodecInfo = Nothing Dim ice As ImageCodecInfo For Each ice In ImageCodecInfo.GetImageEncoders() If ice.MimeType = "image/tiff" Then info = ice End If Next ice Dim ep As New EncoderParameters(1) ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.MultiFrame)) 'Save the master bitmap MasterBitmap.Save(f2, info, ep) ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.FrameDimensionPage)) 'add all images from index 1 to n Dim i As Integer For i = 1 To (L.Count) - 1 ii = CType(L(i), ImageItem) MasterBitmap.SaveAdd(ii.Image, ep) Next i ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.Flush)) 'close out the file. MasterBitmap.SaveAdd(ep) File.Move(f2, f) Try File.Delete(f2) Catch ex As Exception End Try Else 'do a simple save... CType(L(0), ImageItem).Image.Save(f, ImageFormat.Tiff) End If Please remember that this code was gleaned from various sources (mostly Bob Powell's excellent tutorials on GDI+!) so I don't claim to understand it all. Any assistance in getting the new image to be the same orientation and size as the old image would be GREATLY appreciated... background You may wonder why I'm simply reading an image and rewriting it to another image... Good question. The project I'm working on is to take inbound Purchase orders that are faxed and convert them to EDI documents for importing into our order entry system. The images are run through OCR software to produce a text file that is scanned for various pieces of information and then written to an XML file for import. Unfortunately, some of the images that get written from our network fax server contain some sort of anomoly in the data that keeps it from being read by the OCR package (Omnipage). Even Photoshop cannot read the images. Windows picture & fax view will display and print them, though. I stumbled on the thought of reading & rewriting the image to see if VB could read it. Lo and behold, the OCR software can read the newly created file!!! Now I'm trying to work with multipage images and having the above problems. Sorry for the length but I felt that more background was better than none. /background |
#3
| |||
| |||
|
|
This sounds to me like an issue with the original file. Can you send me one? -- Bob Powell [MVP] Visual C#, System.Drawing Ramuseco Limited .NET consulting http://www.ramuseco.com Find great Windows Forms articles in Windows Forms Tips and Tricks http://www.bobpowell.net/tipstricks.htm Answer those GDI+ questions with the GDI+ FAQ http://www.bobpowell.net/faqmain.htm All new articles provide code in C# and VB.NET. Subscribe to the RSS feeds provided and never miss a new article. Doug wrote: I have a small application that reads a multipage TIFF (thanks Bob Powell!) and then simply rewrites the pages to a new TIFF file. It doesn't do anything to it except extract the pages and then reassemble them into a new file. The problem is that the new file is 778kb and the old file was only 58kb. In addition, the new images are rotated 90 degrees and occupies only the left half of the page. The code I use to extract the images is: Dim fs As FileStream = File.Open(f, FileMode.Open, FileAccess.Read) Dim bm As Bitmap = CType(Bitmap.FromStream(fs), Bitmap) If bm.GetFrameCount(FrameDimension.Page) > 1 Then Dim i As Integer For i = 0 To (bm.GetFrameCount(FrameDimension.Page)) - 1 bm.SelectActiveFrame(FrameDimension.Page, i) Dim temp As New Bitmap(bm.Width, bm.Height) Dim g As Graphics = Graphics.FromImage(temp) g.InterpolationMode = InterpolationMode.NearestNeighbor g.DrawImageUnscaled(bm, 0, 0) g.Dispose() AddFrameToList(temp, -1) Next i Else AddFrameToList(bm, 0) End If fs.Close() bm.Dispose() The code to reassemble them into a new image is: If L.Count > 1 Then 'the first item in the list is the master frame. Dim ii As ImageItem = CType(L(0), ImageItem) Dim MasterBitmap As Bitmap = CType(ii.Image, Bitmap) Dim f2 As String = Path.GetDirectoryName(f) + "\Processing.tmp" 'Select the image encoder Dim enc As Encoder = Encoder.SaveFlag Dim info As ImageCodecInfo = Nothing Dim ice As ImageCodecInfo For Each ice In ImageCodecInfo.GetImageEncoders() If ice.MimeType = "image/tiff" Then info = ice End If Next ice Dim ep As New EncoderParameters(1) ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.MultiFrame)) 'Save the master bitmap MasterBitmap.Save(f2, info, ep) ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.FrameDimensionPage)) 'add all images from index 1 to n Dim i As Integer For i = 1 To (L.Count) - 1 ii = CType(L(i), ImageItem) MasterBitmap.SaveAdd(ii.Image, ep) Next i ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.Flush)) 'close out the file. MasterBitmap.SaveAdd(ep) File.Move(f2, f) Try File.Delete(f2) Catch ex As Exception End Try Else 'do a simple save... CType(L(0), ImageItem).Image.Save(f, ImageFormat.Tiff) End If Please remember that this code was gleaned from various sources (mostly Bob Powell's excellent tutorials on GDI+!) so I don't claim to understand it all. Any assistance in getting the new image to be the same orientation and size as the old image would be GREATLY appreciated... background You may wonder why I'm simply reading an image and rewriting it to another image... Good question. The project I'm working on is to take inbound Purchase orders that are faxed and convert them to EDI documents for importing into our order entry system. The images are run through OCR software to produce a text file that is scanned for various pieces of information and then written to an XML file for import. Unfortunately, some of the images that get written from our network fax server contain some sort of anomoly in the data that keeps it from being read by the OCR package (Omnipage). Even Photoshop cannot read the images. Windows picture & fax view will display and print them, though. I stumbled on the thought of reading & rewriting the image to see if VB could read it. Lo and behold, the OCR software can read the newly created file!!! Now I'm trying to work with multipage images and having the above problems. Sorry for the length but I felt that more background was better than none. /background |
#4
| |||
| |||
|
|
Sure. I assume your address is correct (without the _spamkiller_)... Doug "Bob Powell [MVP]" wrote: This sounds to me like an issue with the original file. Can you send me one? -- Bob Powell [MVP] Visual C#, System.Drawing Ramuseco Limited .NET consulting http://www.ramuseco.com Find great Windows Forms articles in Windows Forms Tips and Tricks http://www.bobpowell.net/tipstricks.htm Answer those GDI+ questions with the GDI+ FAQ http://www.bobpowell.net/faqmain.htm All new articles provide code in C# and VB.NET. Subscribe to the RSS feeds provided and never miss a new article. Doug wrote: I have a small application that reads a multipage TIFF (thanks Bob Powell!) and then simply rewrites the pages to a new TIFF file. It doesn't do anything to it except extract the pages and then reassemble them into a new file. The problem is that the new file is 778kb and the old file was only 58kb. In addition, the new images are rotated 90 degrees and occupies only the left half of the page. The code I use to extract the images is: Dim fs As FileStream = File.Open(f, FileMode.Open, FileAccess.Read) Dim bm As Bitmap = CType(Bitmap.FromStream(fs), Bitmap) If bm.GetFrameCount(FrameDimension.Page) > 1 Then Dim i As Integer For i = 0 To (bm.GetFrameCount(FrameDimension.Page)) - 1 bm.SelectActiveFrame(FrameDimension.Page, i) Dim temp As New Bitmap(bm.Width, bm.Height) Dim g As Graphics = Graphics.FromImage(temp) g.InterpolationMode = InterpolationMode.NearestNeighbor g.DrawImageUnscaled(bm, 0, 0) g.Dispose() AddFrameToList(temp, -1) Next i Else AddFrameToList(bm, 0) End If fs.Close() bm.Dispose() The code to reassemble them into a new image is: If L.Count > 1 Then 'the first item in the list is the master frame. Dim ii As ImageItem = CType(L(0), ImageItem) Dim MasterBitmap As Bitmap = CType(ii.Image, Bitmap) Dim f2 As String = Path.GetDirectoryName(f) + "\Processing.tmp" 'Select the image encoder Dim enc As Encoder = Encoder.SaveFlag Dim info As ImageCodecInfo = Nothing Dim ice As ImageCodecInfo For Each ice In ImageCodecInfo.GetImageEncoders() If ice.MimeType = "image/tiff" Then info = ice End If Next ice Dim ep As New EncoderParameters(1) ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.MultiFrame)) 'Save the master bitmap MasterBitmap.Save(f2, info, ep) ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.FrameDimensionPage)) 'add all images from index 1 to n Dim i As Integer For i = 1 To (L.Count) - 1 ii = CType(L(i), ImageItem) MasterBitmap.SaveAdd(ii.Image, ep) Next i ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.Flush)) 'close out the file. MasterBitmap.SaveAdd(ep) File.Move(f2, f) Try File.Delete(f2) Catch ex As Exception End Try Else 'do a simple save... CType(L(0), ImageItem).Image.Save(f, ImageFormat.Tiff) End If Please remember that this code was gleaned from various sources (mostly Bob Powell's excellent tutorials on GDI+!) so I don't claim to understand it all. Any assistance in getting the new image to be the same orientation and size as the old image would be GREATLY appreciated... background You may wonder why I'm simply reading an image and rewriting it to another image... Good question. The project I'm working on is to take inbound Purchase orders that are faxed and convert them to EDI documents for importing into our order entry system. The images are run through OCR software to produce a text file that is scanned for various pieces of information and then written to an XML file for import. Unfortunately, some of the images that get written from our network fax server contain some sort of anomoly in the data that keeps it from being read by the OCR package (Omnipage). Even Photoshop cannot read the images. Windows picture & fax view will display and print them, though. I stumbled on the thought of reading & rewriting the image to see if VB could read it. Lo and behold, the OCR software can read the newly created file!!! Now I'm trying to work with multipage images and having the above problems. Sorry for the length but I felt that more background was better than none. /background |
#5
| |||
| |||
|
|
Was this figured out? I have a similar problem. I have a 9 page multi-page tiff which I am pulling out a couple pages and saving to a new 4 page multipage tiff. This first page is the same as the original. The remaining 3 are much smaller. I am using the MS standard viewer to validate the tiff is good. In the MS viewer all the pages are the same size. I have tried it with different source Tiffs. Here is my code: This is just for a prototype. The final product will be more dynamic. I first split the source tiff: pictureBox1.Image.SelectActiveFrame(FrameDimension .Page, 0); pictureBox2.Image = (Image)pictureBox1.Image.Clone(); pictureBox1.Image.SelectActiveFrame(FrameDimension .Page, 1); pictureBox3.Image = (Image)pictureBox1.Image.Clone(); pictureBox1.Image.SelectActiveFrame(FrameDimension .Page, 2); pictureBox4.Image = (Image)pictureBox1.Image.Clone(); pictureBox1.Image.SelectActiveFrame(FrameDimension .Page, 3); pictureBox5.Image = (Image)pictureBox1.Image.Clone(); Next I save it to a new tiff: Bitmap bmp = new Bitmap(pictureBox2.Image); ImageCodecInfo ici = GetEncoderCodec("image/tiff"); System.Drawing.Imaging.EncoderParameters eps = new EncoderParameters(2); eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Co mpression, (long)EncoderValue.CompressionLZW); eps.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Sa veFlag, (long)EncoderValue.MultiFrame); bmp.Save("c:\\test.tif", ici, eps); eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Co mpression, (long)EncoderValue.CompressionLZW); eps.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Sa veFlag, (long)EncoderValue.FrameDimensionPage); bmp.SaveAdd(pictureBox3.Image, eps); bmp.SaveAdd(pictureBox4.Image, eps); bmp.SaveAdd(pictureBox5.Image, eps); eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Sa veFlag, (long)EncoderValue.Flush); bmp.SaveAdd(eps); Any help/direction would be appreciated. Thanks, Glen "Doug" wrote: Sure. I assume your address is correct (without the _spamkiller_)... Doug "Bob Powell [MVP]" wrote: This sounds to me like an issue with the original file. Can you send me one? -- Bob Powell [MVP] Visual C#, System.Drawing Ramuseco Limited .NET consulting http://www.ramuseco.com Find great Windows Forms articles in Windows Forms Tips and Tricks http://www.bobpowell.net/tipstricks.htm Answer those GDI+ questions with the GDI+ FAQ http://www.bobpowell.net/faqmain.htm All new articles provide code in C# and VB.NET. Subscribe to the RSS feeds provided and never miss a new article. Doug wrote: I have a small application that reads a multipage TIFF (thanks Bob Powell!) and then simply rewrites the pages to a new TIFF file. It doesn't do anything to it except extract the pages and then reassemble them into a new file. The problem is that the new file is 778kb and the old file was only 58kb. In addition, the new images are rotated 90 degrees and occupies only the left half of the page. The code I use to extract the images is: Dim fs As FileStream = File.Open(f, FileMode.Open, FileAccess.Read) Dim bm As Bitmap = CType(Bitmap.FromStream(fs), Bitmap) If bm.GetFrameCount(FrameDimension.Page) > 1 Then Dim i As Integer For i = 0 To (bm.GetFrameCount(FrameDimension.Page)) - 1 bm.SelectActiveFrame(FrameDimension.Page, i) Dim temp As New Bitmap(bm.Width, bm.Height) Dim g As Graphics = Graphics.FromImage(temp) g.InterpolationMode = InterpolationMode.NearestNeighbor g.DrawImageUnscaled(bm, 0, 0) g.Dispose() AddFrameToList(temp, -1) Next i Else AddFrameToList(bm, 0) End If fs.Close() bm.Dispose() The code to reassemble them into a new image is: If L.Count > 1 Then 'the first item in the list is the master frame. Dim ii As ImageItem = CType(L(0), ImageItem) Dim MasterBitmap As Bitmap = CType(ii.Image, Bitmap) Dim f2 As String = Path.GetDirectoryName(f) + "\Processing.tmp" 'Select the image encoder Dim enc As Encoder = Encoder.SaveFlag Dim info As ImageCodecInfo = Nothing Dim ice As ImageCodecInfo For Each ice In ImageCodecInfo.GetImageEncoders() If ice.MimeType = "image/tiff" Then info = ice End If Next ice Dim ep As New EncoderParameters(1) ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.MultiFrame)) 'Save the master bitmap MasterBitmap.Save(f2, info, ep) ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.FrameDimensionPage)) 'add all images from index 1 to n Dim i As Integer For i = 1 To (L.Count) - 1 ii = CType(L(i), ImageItem) MasterBitmap.SaveAdd(ii.Image, ep) Next i ep.Param(0) = New EncoderParameter(enc, CLng(EncoderValue.Flush)) 'close out the file. MasterBitmap.SaveAdd(ep) File.Move(f2, f) Try File.Delete(f2) Catch ex As Exception End Try Else 'do a simple save... CType(L(0), ImageItem).Image.Save(f, ImageFormat.Tiff) End If Please remember that this code was gleaned from various sources (mostly Bob Powell's excellent tutorials on GDI+!) so I don't claim to understand it all. Any assistance in getting the new image to be the same orientation and size as the old image would be GREATLY appreciated... background You may wonder why I'm simply reading an image and rewriting it to another image... Good question. The project I'm working on is to take inbound Purchase orders that are faxed and convert them to EDI documents for importing into our order entry system. The images are run through OCR software to produce a text file that is scanned for various pieces of information and then written to an XML file for import. Unfortunately, some of the images that get written from our network fax server contain some sort of anomoly in the data that keeps it from being read by the OCR package (Omnipage). Even Photoshop cannot read the images. Windows picture & fax view will display and print them, though. I stumbled on the thought of reading & rewriting the image to see if VB could read it. Lo and behold, the OCR software can read the newly created file!!! Now I'm trying to work with multipage images and having the above problems. Sorry for the length but I felt that more background was better than none. /background |
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
| |