1

既存の BMP を表示するイメージを含むキャンバスがあります。キャンバスに四角形を描画し、これらを Children コレクションに追加します。[保存] をクリックしたときに、基になる BMP ファイルを更新したいと考えています。

次のコードは機能しますが、BMP に描画される四角形は、私が描いたものよりもはるかに小さいです。座標の違いはあると思いますか?System.Drawing を使うべきではないのでしょうか?

        using (Graphics g = Graphics.FromImage(image))
        {
          g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;

          foreach (var child in canvas.Children)
          {
            if (child is System.Windows.Shapes.Rectangle)
            {
              var oldRect = child as System.Windows.Shapes.Rectangle;

              // need to do something here to make the new rect bigger as the scale is clearly different
              var rect = new Rectangle((int)Canvas.GetLeft(oldRect), (int)Canvas.GetTop(oldRect), (int)oldRect.Width, (int)oldRect.Height);
              g.FillRectangle(Brushes.Black, rect);
            }
          }
          ... code to save bmp   

すべての提案を歓迎します!

ありがとう

4

1 に答える 1

3

System.Windows.Media.Imaging.RenderTargetBitmapクラスを使用してみてください(例はこちら)。
Wpf は Device Independent Graphics を使用するため、DPI を補正する必要があります。

RenderTargetBitmap bmp = new RenderTargetBitmap((int)Canvas1.Width, (int)Canvas1.Height, 96, 96, PixelFormats.Default);
bmp.Render(Canvas1);

3 番目のリンクから:

画面上のテキストとグラフィックスのサイズを決定するシステム要因には、解像度と DPI の 2 つがあります。解像度は、画面に表示されるピクセル数を表します。解像度が高くなると、ピクセルが小さくなり、グラフィックスやテキストが小さく表示されます。1024 x 768 に設定されたモニターに表示されるグラフィックは、解像度が 1600 x 1200 に変更されると、はるかに小さく表示されます。

于 2012-06-26T03:01:05.043 に答える