2012-01-06 7 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はたぶん1週間前に始まったばかりです)。キャンバスをレンダリングして試してみるよ、ありがとう! – user1134837

関連する問題