6

そこに表示できるものがPictureboxたくさんあります。Bitmaps他のビットマップと比較した場合のビットマップの相対的なサイズは、ユーザーにとって重要です。彼らは、ある画像が別の画像よりも小さいか大きいかを確認できる必要があります。ビットマップも画像ボックスに完全に収まる必要があり、画像ボックスのサイズを変更することはできません。

スケールされていないビットマップを巨大な画像ボックスに表示するだけの場合、ビットマップの相対的なサイズは簡単にわかりますが、小さなボックスに収めようとしてスケールダウンする必要がある場合は、問題が発生します。

StretchPictureBoxSizeModeを使用すると、ビットマップのサイズが特定されていないために画像が歪んで表示されることがあります。また、Stretch sizemodは、必要な種類に最も近いものです。

他のどのサイズモードも私のニーズに合わないので、ビットマップのサイズを変更する関数を作成する必要があることを知っています。これが、完全に間違った方向に進んでいることに気付くまでの試みの始まりでした。ここに返される画像は、スケールを保持していません。 '。

    private Bitmap ResizeBitmap(Bitmap img)
    {
        int newWidth = 0;
        int newHeight = 0;
        double imgRatio;

        if (img.Width > img.Height)
        {
            imgRatio = ((double)img.Height / (double)img.Width) * 100;

            newWidth = pictureBox.Width;

            newHeight = (int)(((double)newWidth / 100) * imgRatio);
        }
        else
        {
            imgRatio = ((double)img.Width / (double)img.Height) * 100;

            newHeight = pictureBox.Height;

            newWidth = (int)(((double)newHeight / 100) * imgRatio);
        }

        Bitmap newImg = new Bitmap(newWidth, newHeight);

        using (Graphics g = Graphics.FromImage(newImg))
            g.DrawImage(img, 0, 0, newWidth, newHeight);

        return newImg;
    }

私はしばらくの間画面を見つめていましたが、スケーリングを行うための数学は現在私を理解していません。誰かが私を正しい方向に向けることができることを望んでいます。午前4時近くなので、私の脳はいくつかの単純な概念を理解していないのかもしれません。

4

1 に答える 1

11

PictureBoxSizeModeをZoomに設定します。これにより、アスペクト比が維持されます。

于 2013-01-08T03:55:29.433 に答える