1

openfiledialog を使用して選択した画像の領域を選択しようとしています 選択しようとしている領域は、x、y 座標 5,5 から 16x16 です 選択したら、16x16 の画像を座標 0 の別の pictureBox に描画します,0

これは私が持っているコードですが、元の画像の正しい部分を選択することができません。なぜ機能しないのかについての提案はありますか?

DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK) // Test result.
{
    Image origImage = Image.FromFile(openFileDialog1.FileName);
    pictureBoxSkin.Image = origImage;
    lblOriginalFilename.Text = openFileDialog1.SafeFileName;

    System.Drawing.Bitmap bmp = new Bitmap(16, 16);
    Graphics g3 = Graphics.FromImage(bmp);
    g3.DrawImageUnscaled(origImage, 0, 0, 16, 16);

    Graphics g2 = pictureBoxNew.CreateGraphics();
    g2.DrawImageUnscaled(bmp, 0, 0, 16, 16);
}
4

2 に答える 2

2

正しいセクションを選択するには、次を置き換えます。

g3.DrawImageUnscaled(origImage, 0, 0, 16, 16);

g3.DrawImageUnscaled(origImage, -5, -5, 16, 16);
于 2013-01-26T14:27:43.497 に答える
0

これを置き換えます:

Graphics g2 = pictureBoxNew.CreateGraphics();
g2.DrawImageUnscaled(bmp, 0, 0, 16, 16);

これとともに:

pictureBoxNew.Image = bmp;

そして元気です。

完全なコード:

DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK) // Test result.
{
    Image origImage = Image.FromFile(openFileDialog1.FileName);
    pictureBoxSkin.Image = origImage;
    lblOriginalFilename.Text = openFileDialog1.SafeFileName;

    System.Drawing.Bitmap bmp = new Bitmap(16, 16);
    Graphics g3 = Graphics.FromImage(bmp);
    g3.DrawImageUnscaled(origImage, 0, 0, 16, 16);

    pictureBoxNew.Image = bmp;
    //Graphics g2 = pictureBoxNew.CreateGraphics();
    //g2.DrawImageUnscaled(bmp, 0, 0, 16, 16);
}

eventの外にPaint何かを描画すると、コントロールを再度描画する必要があるとすぐに消去されます (つまり、最小化された状態から復元されたときに、別のウィンドウがウィンドウを通過するか、Refreshメソッドを呼び出します)。そのため、コントロールの描画コードをPaintイベント内に配置するか、コントロールにイメージの描画を管理させます (この場合はImagePictureBoxコントロールに を割り当てます)。

于 2013-01-26T14:17:46.630 に答える