35
A
回答
74
開始用它放入一個Image對象
Bitmap bitmap = (Bitmap)Image.FromFile(file);
保存位圖存儲爲TIFF
MemoryStream byteStream = new MemoryStream();
bitmap.Save(byteStream, ImageFormat.Tiff);
認沽TIFF文件到另一個Image對象
Image tiff = Image.FromStream(byteStream)
第一的位圖準備編碼器:
ImageCodecInfo encoderInfo = GetEncoderInfo("image/tiff");
EncoderParameters encoderParams = new EncoderParameters(2);
EncoderParameter parameter = new EncoderParameter(
Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
encoderParams.Param[0] = parameter;
parameter = new EncoderParameter(Encoder.SaveFlag,
(long)EncoderValue.MultiFrame);
encoderParams.Param[1] = parameter;
保存到文件:
tiff.Save(sOutFilePath, encoderInfo, encoderParams);
對於後續頁面,準備編碼器:
EncoderParameters EncoderParams = new EncoderParameters(2);
EncoderParameter SaveEncodeParam = new EncoderParameter(
Encoder.SaveFlag,
(long)EncoderValue.FrameDimensionPage);
EncoderParameter CompressionEncodeParam = new EncoderParameter(
Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
EncoderParams.Param[0] = CompressionEncodeParam;
EncoderParams.Param[1] = SaveEncodeParam;
tiff.SaveAdd(/* next image as tiff - do the same as above with memory */, EncoderParams);
最後刷新文件:
EncoderParameter SaveEncodeParam = new EncoderParameter(
Encoder.SaveFlag, (long)EncoderValue.Flush);
EncoderParams = new EncoderParameters(1);
EncoderParams.Param[0] = SaveEncodeParam;
tiff.SaveAdd(EncoderParams);
這應該讓你開始。
3
當談到處理和創建標準格式文件時,不是微軟的記錄迷,我建議使用ImageMagick,以。MagickNet的形式提供.Net庫(當心,http://midimick.com/magicknet/當前有一個間諜軟件彈出窗口,我已經提醒網站所有者)。
19
在Google上搜索了一下後,發現了這篇文章。我試了一下a'b'c'd'e'f'g'h'的帖子中的代碼,但那對我沒有用。也許,我沒有做正確的事情。
在任何情況下,我發現另一篇文章保存圖像到多頁tiffs。這裏是該帖子的鏈接:http://www.bobpowell.net/addframes.htm
此外,這裏是代碼爲我工作。它應該與該帖子相同。
Encoder encoder = Encoder.SaveFlag;
ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff";
EncoderParameters encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);
// Save the first frame of the multi page tiff
Bitmap firstImage = (Bitmap) _scannedPages[0].RawContent;
firstImage.Save(fileName, encoderInfo, encoderParameters);
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);
// Add the remining images to the tiff
for (int i = 1; i < _scannedPages.Count; i++)
{
Bitmap img = (Bitmap) _scannedPages[i].RawContent;
firstImage.SaveAdd(img, encoderParameters);
}
// Close out the file
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
firstImage.SaveAdd(encoderParameters);
2
這是multi-tiff文件的拆分操作。它就像字符串子字符串函數一樣工作。圖像的第一個索引將是您的MasterBitMap,您將繼續將幀添加到MasterBitmap直到索引結束。
public void SaveMultiFrameTiff(int start, int end)
{
string outputFileName = "out.TIF";
string inputFileName = "input.TIF";
try
{
Bitmap MasterBitmap = new Bitmap(inputFileName); //Start page of document(master)
Image imageAdd = Image.FromFile(inputFileName); //Frame Image that will be added to the master
Guid guid = imageAdd.FrameDimensionsList[0]; //GUID
FrameDimension dimension = new FrameDimension(guid);
// start index cannot be less than 0 and cannot be greater than frame count
if (start < 1 || end > MasterBitmap.GetFrameCount(dimension)) { return; }
EncoderParameters ep = new EncoderParameters(1);
//Get Image Codec Information
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo codecInfo = codecs[3]; //image/tiff
//MultiFrame Encoding format
EncoderParameter epMultiFrame = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
ep.Param[0] = epMultiFrame;
MasterBitmap.SelectActiveFrame(dimension, start - 1);
MasterBitmap.Save(outputFileName, codecInfo, ep);//create master document
//FrameDimensionPage Encoding format
EncoderParameter epFrameDimensionPage = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
ep.Param[0] = epFrameDimensionPage;
for (int i = start; i < end; i++)
{
imageAdd.SelectActiveFrame(dimension, i);//select next frame
MasterBitmap.SaveAdd(new Bitmap(imageAdd), ep);//add it to the master
}
//Flush Encoding format
EncoderParameter epFlush = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush);
ep.Param[0] = epFlush;
MasterBitmap.SaveAdd(ep); //flush the file
}
catch (Exception ex)
{
throw ex;
}
}
}
4
有幫助的話題。謝謝(你的)信息。我需要從base64編碼的字符串數組中拼接多頁圖像。這是我基於這個線程中的信息放在一起的。我不太瞭解爲什麼我必須創建一個具有明確指定的圖像格式的內存流,但這是結束了工作,如果有更好的方式來處理這個請讓我知道。謝謝
/// <summary>
/// Takes in an array of base64 encoded strings and creates a multipage tiff.
/// </summary>
/// <param name="sOutFile">file to be generated</param>
/// <param name="pagesbase64Array"></param>
private void SaevAsMultiPageTiff(string sOutFile, string[] pagesbase64Array)
{
System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.SaveFlag;
ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");
EncoderParameters encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);
Bitmap firstImage = null;
try
{
using (MemoryStream ms1 = new MemoryStream())
{
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(pagesbase64Array[0])))
{
Image.FromStream(ms).Save(ms1, ImageFormat.Tiff);
firstImage = (Bitmap)Image.FromStream(ms1);
}
// Save the first frame of the multi page tiff
firstImage.Save(sOutFile, encoderInfo, encoderParameters); //throws Generic GDI+ error if the memory streams are not open when this is called
}
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);
Bitmap imagePage;
// Add the remining images to the tiff
for (int i = 1; i < pagesbase64Array.Length; i++)
{
using (MemoryStream ms1 = new MemoryStream())
{
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(pagesbase64Array[i])))
{
Image.FromStream(ms).Save(ms1, ImageFormat.Tiff);
imagePage = (Bitmap)Image.FromStream(ms1);
}
firstImage.SaveAdd(imagePage, encoderParameters); //throws Generic GDI+ error if the memory streams are not open when this is called
}
}
}
catch (Exception)
{
//ensure the errors are not missed while allowing for flush in finally block so files dont get locked up.
throw;
}
finally
{
// Close out the file
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
firstImage.SaveAdd(encoderParameters);
}
}
相關問題
- 1. 在.Net 2.0中將8位灰度tiff圖像轉換爲8位灰度jpg
- 2. 如何在Java中將16位.tiff圖像轉換爲8位.tiff圖像?
- 3. 將多頁TIFF轉換爲PNG .Net
- 4. 如何在JAVA中將兩個或多個tiff圖像文件合併爲一個多頁tiff圖像
- 5. C#:如何通過MemoryStream將多頁TIFF轉換爲一個長圖像?
- 6. 無法將圖像轉換爲tiff
- 7. 如何將HTML轉換爲TIFF圖像?
- 8. 將tiff轉換爲緩衝圖像(Java)
- 9. 如何將16位,TIFF,灰度圖像轉換爲32位,TIFF,在Java中的灰度圖像?
- 10. 將多個字節[]轉換爲多頁TIFF等效圖像。無需GDI +
- 11. 使用rawpy將多個原始.NEF圖像轉換爲TIFF
- 12. 將多頁PDF轉換爲多圖像
- 13. 如何在.NET 2.0中打開多幀TIFF圖像格式圖像?
- 14. 如何將pdf轉換爲.net中的位圖圖像?
- 15. Javascript TIFF圖像轉換
- 16. 隱藏單頁tiff圖像到rubiff的多頁tiff圖像
- 17. Android將Tiff和PDF文件轉換爲圖像以在圖像視圖中顯示每個頁面
- 18. 在matlab中將tiff圖像轉換爲avi
- 19. 將PictureBox圖像轉換爲位圖
- 20. 如何將位圖轉換爲圖像
- 21. 將字節轉換爲位圖圖像
- 22. 將圖像轉換爲位圖
- 23. 如何將圖像轉換爲位圖
- 24. 將位圖轉換爲WebP圖像?
- 25. 將圖像轉換爲位圖android
- 26. 將MsWord第一頁轉換爲圖像
- 27. 將位圖轉換爲圖像
- 28. 將圖像轉換爲位圖
- 29. 將位圖轉換爲javascript圖像
- 30. C#.NET將JPEG圖像轉換爲位圖結構
優秀的答案。如果你描述你是如何到達它的話(如果不是從試驗和錯誤中得知它的話),只能說它更完整,因爲MSDN文檔使它幾乎無法理解。 – 2009-06-16 19:47:13
我想知道的是使用ImageFormat。Tiff在MemoryStream的Save方法中 - 顯然以後完成的「編碼」是一個完全不相關的過程 - 即將使用ImageFormat.Tiff保存的內存流的字節轉儲到文件中不會創建TIFF文件,我想呢? – 2011-01-13 11:36:54