我有一個關於將不同的fie /圖像類型轉換爲TIFF格式的小問題。我們使用Atalasoft,一個第三方軟件,用於處理我們的掃描和查看文檔和圖像。使用Atalasoft&C將PDF/JPEG轉換爲TIFF#
我面臨的問題是我在TiffDocument()方法中得到一個參數異常。它將文件流傳入該方法。參數異常聲明文件不是TIFF格式。當我傳遞PDF或JPEG時,這是可以理解的。
我嘗試過試圖轉換這些,但無濟於事無數次嘗試。任何時候我嘗試將jpeg轉換爲tiff,都會出現問題,因爲圖像是AtalaImage而不是System.Drawing.Image。
對於JPEG轉換,我從註釋部分here劫持了這段代碼。
public static Image ConvertToJpeg(string fileName)
{
Image retVal = null;
using (FileStream fs = File.OpenRead(fileName))
{
retVal = ConvertToJpeg(fs);
fs.Close();
}
return retVal;
}
/// <summary>
/// Converts the specified image into a JPEG format
/// </summary>
/// <param name="imgStream">The stream of the image to convert</param>
/// <returns>An Image with JPEG data if successful; otherwise null</returns>
public static Image ConvertToJpeg(Stream imgStream)
{
Image retVal = null;
Stream retStream = new MemoryStream();
using (Image img = Image.FromStream(imgStream, true, true))
{
img.Save(retStream, ImageFormat.Jpeg);
retStream.Flush();
}
retVal = Image.FromStream(retStream, true, true);
return retVal;
}
}
}
此外,Atalasoft確實有關於小的指令,PDF轉換爲TIFF,而是一個ArgumentException在保存方法拋出(錯誤消息:TIFF編解碼器錯誤錯誤寫入TIFF流)。下面的代碼是相同的鏈接代碼:
TiffEncoder noAppend = new TiffEncoder(TiffCompression.Default, true);
PdfDecoder pdf = new PdfDecoder();
for(int i=0; i< numPages; i++)
{
AtalaImage img = pdf.Read(inStream, i, null);
noAppend.Save(outStream, img, null);
img.Dispose();
outStream.Seek(0, SeekOrigin.Begin);
}
編輯:在上面的代碼工作,它的PDF轉換成功爲TIFF。
此外,我需要知道這個文件是什麼格式,所以它可以發送到適當的方法進行轉換。我曾嘗試使用this question的代碼,但無濟於事。
下面是魔術發生的一個片段。有調用此功能,但該功能的圖像設置爲給WebImageViewer.Image到可變並調用以下方法:
private void Foo(AtalaImage image)
{
/*I have tried converting here, before the file stream, and after the
filestream. */
var url = wiv.ImageUrl;
var path = Page.MapPath(url);
var frame = wiv.CurrentPage - 1;
Stream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
var doc = new TiffDocument(fs); //This is where the error occurs.
var page = new TiffPage(image);
doc.Pages[frame] = page;
doc.Save(path + "_tmp");
fs.Close();
File.Delete(path);
File.Move(path + "_tmp", path);
wtv.OpenUrl(url);
wtv.SelectedIndex = frame;
wiv.OpenUrl(url, frame);
}
任何幫助或思維過程,將不勝感激。