0

画像を開いて境界線を追加し、画像を C# に保存しようとしています。

コードを取得しました。スタック オーバーフローからの回答だったと思います。ここにあります:

    public Bitmap AddBorder(Bitmap image, Color color, int size)
    {
        Bitmap result = new Bitmap(image.Width + size * 2, image.Height + size * 2);
        Graphics g = Graphics.FromImage(result);
        g.Clear(color);
        int x = (result.Width - image.Width) / 2;
        int y = (result.Height - image.Height) / 2;
        g.DrawImage(image, new Point(x, y));
        g.Dispose();
        return result;
    }

次を使用して画像を保存します。resultimage.save(fileName);

サイズが 5MP の画像でテストしました。そして、画像をディスクに保存しました。しかし、エラーがあります。

結果の左側と上部に境界線が表示されます。画像はズームされているようです。たとえば、保存された画像では、その一部が失われます (正しいサイズと下から)。

私は何か間違ったことをしていますか?

前もって感謝します。

4

1 に答える 1

2

これは、入力ビットマップの解像度がビデオ アダプターの解像度と一致しない場合に説明したように、問題が発生します。デバッガーで確認できるもの。とのウォッチを追加image.HorizontalResolutionresult.HorizontalResolutionます。たまたま一致するだけです。DrawImage(Image, Point) は、イメージの見かけのサイズがビットマップが設計されたマシンと同じになるように解像度を一致させるためにイメージを再スケーリングします。

Graphics.DrawImage(Image, Rectangle) オーバーロードを使用して解決し、画像の最終的なサイズを直接制御します。修理:

   g.DrawImage(image, new Rectangle(x, y, image.Width, image.Height));
于 2012-10-16T17:44:31.000 に答える