1

ドラッグ アンド ドロップ時に PictureBox を移動するメソッドを作成しました。しかし、PictureBox をドラッグすると、画像の実際のサイズが画像になり、画像が PictureBox のサイズになるようにしたい

 private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            picBox = (PictureBox)sender;
            var dragImage = (Bitmap)picBox.Image;
            IntPtr icon = dragImage.GetHicon();
            Cursor.Current = new Cursor(icon);
            DoDragDrop(pictureBox1.Image, DragDropEffects.Copy);
            DestroyIcon(icon);
        }
    }

protected override void OnGiveFeedback(GiveFeedbackEventArgs e)
    {
        e.UseDefaultCursors = false;
    }
    protected override void OnDragEnter(DragEventArgs e)
    {
        if (e.Data.GetDataPresent(typeof(Bitmap))) e.Effect = DragDropEffects.Copy;
    }
    protected override void OnDragDrop(DragEventArgs e)
    {

        picBox.Location = this.PointToClient(new Point(e.X - picBox.Width / 2, e.Y - picBox.Height / 2));
    }

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    extern static bool DestroyIcon(IntPtr handle);
4

2 に答える 2

1

使用する

var dragImage = new Bitmap((Bitmap)picBox.Image, picBox.Size);

それ以外の

var dragImage = (Bitmap)picBox.Image;

(後で一時イメージでDisposeを呼び出すこともできますが、そうでない場合はGCが処理します)

于 2013-01-11T15:37:18.767 に答える
0

これは、画像ボックス内の画像がフルサイズの画像であるためです。ピクチャーボックスは表示目的で拡大縮小するだけですが、Imageプロパティには元のサイズの画像があります。

したがって、MouseDownイベントハンドラーで、使用する前に画像のサイズを変更する必要があります。

それよりも:

var dragImage = (Bitmap)picBox.Image;

試す:

 var dragImage = ResizeImage(picBox.Image, new Size(picBox.Width, PicBox.Height));

次のような方法を使用して、画像のサイズを変更します。

public static Image ResizeImage(Image image, Size size, 
    bool preserveAspectRatio = true)
{
    int newWidth;
    int newHeight;
    if (preserveAspectRatio)
    {
        int originalWidth = image.Width;
        int originalHeight = image.Height;
        float percentWidth = (float)size.Width / (float)originalWidth;
        float percentHeight = (float)size.Height / (float)originalHeight;
        float percent = percentHeight < percentWidth ? percentHeight : percentWidth;
        newWidth = (int)(originalWidth * percent);
        newHeight = (int)(originalHeight * percent);
    }
    else
    {
        newWidth = size.Width;
        newHeight = size.Height;
    }
    Image newImage = new Bitmap(newWidth, newHeight);
    using (Graphics graphicsHandle = Graphics.FromImage(newImage))
    {
        graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic;
        graphicsHandle.DrawImage(image, 0, 0, newWidth, newHeight);
    }
    return newImage;
}

*ここからの画像サイズ変更コード:http: //www.codeproject.com/Articles/191424/Resizing-an-Image-On-The-Fly-using-NET

于 2013-01-11T15:40:35.083 に答える