前回は場所を指定してペーストできるようにしました。
今回はサイズも指定できるようにします。
これは右側に新しい画像をペーストしたものです。2つの画像はサイズがちがっているのでこのようになります。今回は、ペーストするときすでに存在する画像のサイズを調べて同じサイズに変更してからペーストすることにします。
まずペーストするときに自動的にサイズ調整するかどうかのプロパティを作成します。
1 2 3 4 5 6 7 8 9 |
public partial class UserControlImage : UserControl { public bool isAutoSizePaste { set; get; } = false; } |
次にメニューを作成してプロパティをセットできるようにします。
1 2 3 4 5 6 7 8 9 10 |
public partial class Form1 : Form { private void IsAutoSizePasteMenuItem_Click(object sender, EventArgs e) { if(userControlImage1.IsAutoSizePaste) userControlImage1.IsAutoSizePaste = false; else userControlImage1.IsAutoSizePaste = true; } } |
それからペーストするときに自動的にサイズを調整する設定になっているときはわかるようにメニューにチェックマークをつけます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public partial class Form1 : Form { void CheckMenuPasteAutoSize() { if(userControlImage1.IsAutoSizePaste) IsAutoSizePasteMenuItem.Checked = true; else IsAutoSizePasteMenuItem.Checked = false; } private void CopyPasteMenuItem_DropDownOpening(object sender, EventArgs e) { CheckMenuPasteMode(); CheckMenuPasteAutoSize(); // CheckMenuPasteMode()は以前のCopyPasteMenuItem_DropDownOpeningと同じ // UserControlImage.PasteMode1プロパティを調べて対応するものにチェックをいれる } } |
これは実際にサイズ変更してペーストするときの処理です。上と下に追加するときは幅を、左右に追加するときは高さを調べてクリップボードから取得したイメージのサイズ変更をおこなっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
public partial class UserControlImage : UserControl { Bitmap GetBitmapAdjustedSize(Bitmap image) { int oldWidth = Bitmap.Width; int oldHeight = Bitmap.Height; int newWidth = image.Width; int newHeight = image.Height; if(PasteMode1 == PasteMode1.UpperSide || PasteMode1 == PasteMode1.UnderSide) { newWidth = newWidth * oldWidth / image.Width; newHeight = newHeight * oldWidth / image.Width; } if(PasteMode1 == PasteMode1.LeftSide || PasteMode1 == PasteMode1.RightSide) { newWidth = newWidth * oldHeight / image.Height; newHeight = newHeight * oldHeight / image.Height; } Bitmap newBitmap = new Bitmap(newWidth, newHeight); Graphics g = Graphics.FromImage(newBitmap0); Rectangle srcRect = new Rectangle(0, 0, image.Width, image.Height); Rectangle destRect = new Rectangle(0, 0, newWidth, newHeight); g.DrawImage(image, destRect, srcRect, GraphicsUnit.Pixel); g.Dispose(); return newBitmap; } public void PasteImage() { if(!Clipboard.ContainsImage()) return; if(BitmapRectangle != null) UniteBitmapRectangle(new Point(0, 0)); Bitmap image = (Bitmap)Clipboard.GetDataObject().GetData("System.Drawing.Bitmap"); if(IsAutoSizePaste) image = GetBitmapAdjustedSize(image); PasteImage0(image); } } |