2012-01-06 52 views
0

我有一個畫布,它有一個文檔的位圖圖像和幾個文本框在其上的各個位置。文本框的存在是爲了阻擋其背後的文本,但也可能包含頂部的文本(想象在文檔中阻止文本)。這一切都需要保存爲一個tiff文件。是否可以將文本框轉換爲BitmapImage或BitmapFrame?

我已經能夠很容易地保存圖像,但是將文本框保存在頂部已被證明是真正的挑戰。這是我目前的。

//The document bitmap is the first item in the canvas 
foreach (Control redaction in canvas.Children) 
{ 
    Size sizeOfControl = new Size(redaction.Width, redaction.Height); 
    renderBitmap = new RenderTargetBitmap((Int32)sizeOfControl.Width, (Int32)sizeOfControl.Height, 96d, 96d, PixelFormats.Pbgra32); 
    renderBitmap.Render(redaction); 
    tiffEncoder.Frames.Add(BitmapFrame.Create(frame)); 
} 
FileStream fs = new FileStream(outputFileName, FileMode.Create); 
tiffEncoder.Save(fs); 
fs.Flush(); 
fs.Close(); 

當我不文檔位圖添加到tiffEncoder,它節省了黑色圖像,這告訴我,這是不正確轉換文本框(或至少是辦法,我希望它) 。

那麼這甚至可能嗎?

回答

0

爲什麼要單獨渲染每個控件?你也沒有使用renderBitmap,但frame添加到編碼器(不知道從哪裏來)。這應該呈現它的帆布和所有控件:

var bm = new RenderTargetBitmap((int)canvas.Width, (int)canvas.Height, 
           96d, 96d, PixelFormats.Pbgra32); 
tiffEncoder.Frames.Add(BitmapFrame.Create(bm)); 

using (var fs = new FileStream(outputFileName, FileMode.Create)) 
{ 
    tiffEncoder.Save(fs); 
} 

還要注意的是帆布必須是可見的(所以窗口不能被最小化),否則WPF不會打擾使其。

+0

啊,我甚至沒有想過沒有畫布渲染。我只是假定在我無法弄清楚並從那裏轉移之後它不起作用。新手錯誤我想(剛開始WPF也許一週前)。我會把畫布渲染出來,試試這個,謝謝! – user1134837 2012-01-06 20:29:15

相關問題