0

私は現在、ユーザーがパネルに描画できる小さなペイント アプリケーションを作成しています。私は選択ツールに取り組んでおり、パネルの特定の領域を選択して、この選択した領域をパネルのすぐ右側にある PictureBox に直接貼り付けたいと考えています。

私の問題は、現在のコードが正しく機能していないことです。パネルから作成しているビットマップを貼り付けようとすると、実際の画像ではなく、PictureBox に大きな赤い X が表示されます。画像がビットマップに正しくコピーされていることはわかっています。これは、画像を jpeg としてディスクに保存するコードを配置してから画像を確認したところ、すべて正常に表示されているためです。

これが私のコードです:

private void tbCopy_Click(object sender, EventArgs e)
{
    int width = selectList[0].getEnd().X - selectList[0].getInitial().X;
    int height = selectList[0].getEnd().Y - selectList[0].getInitial().Y;

    using (Bitmap bmp = new Bitmap(width, height))
    {
        pnlDraw.DrawToBitmap(bmp, new System.Drawing.Rectangle(
                                      selectList[0].getInitial().X,
                                      selectList[0].getInitial().Y, 
                                      width, height));
        pbPasteBox.Image = bmp;             
    }
}   

幅と高さはコピーしたい領域の寸法であり、selectList は、コピーしたい領域の座標を含む 1 つのオブジェクトを含むリストです。

どんな助けでも大歓迎です。

4

1 に答える 1

6

あなたの問題はusing(){}、使用中括弧内のコードが () 内のオブジェクトを完了すると、不要になったと見なされて破棄されることです。

ブレースを取り外すだけでBitmap bmp = new Bitmap(width, height)問題が解決するはずです

于 2013-04-16T06:47:39.417 に答える