範囲選択をしてサイズ変更するとき縦横の比を維持したままサイズ変更したくなる場合があります。とくに人物の画像の場合、縦横の比が崩れてしまうと違和感のある画像になってしまいます。
コントロールキーをおした状態でクリッパーをドラッグするとサイズ比を維持したまま選択部分のサイズを変更することができます。
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
public partial class UserControlImage : UserControl { void OnMouseMoveForSizeChangeSelection(Point bitmapPoint) { int xMove = bitmapPoint.X - rectangleMoveStartMousePosX; int yMove = bitmapPoint.Y - rectangleMoveStartMousePosY; int x, y, width, height; x = BitmapRectangle.X; y = BitmapRectangle.Y; width = BitmapRectangle.Width; height = BitmapRectangle.Height; bool isRatioMaintained = false; if(Control.ModifierKeys.HasFlag(Keys.Control)) isRatioMaintained = true; if(dragGriper == Griper.East) { width = BitmapRectangle.OldWidth + xMove; if(isRatioMaintained) height = BitmapRectangle.OldHeight * width / BitmapRectangle.OldWidth; } if(dragGriper == Griper.South) { height = BitmapRectangle.OldHeight + yMove; if(isRatioMaintained) width = BitmapRectangle.OldWidth * height / BitmapRectangle.OldHeight; } if(dragGriper == Griper.SouthEast) { width = BitmapRectangle.OldWidth + xMove; height = BitmapRectangle.OldHeight + yMove; if(isRatioMaintained) width = BitmapRectangle.OldWidth * height / BitmapRectangle.OldHeight; } if(dragGriper == Griper.North) { y = BitmapRectangle.OldY + yMove; height = BitmapRectangle.OldHeight - yMove; if(isRatioMaintained) width = BitmapRectangle.OldWidth * height / BitmapRectangle.OldHeight; } if(dragGriper == Griper.West) { x = BitmapRectangle.OldX + xMove; width = BitmapRectangle.OldWidth - xMove; if(isRatioMaintained) height = BitmapRectangle.OldHeight * width / BitmapRectangle.OldWidth; } if(dragGriper == Griper.NorthWest) { x = BitmapRectangle.OldX + xMove; width = BitmapRectangle.OldWidth - xMove; y = BitmapRectangle.OldY + yMove; height = BitmapRectangle.OldHeight - yMove; if(isRatioMaintained) { width = BitmapRectangle.OldWidth * height / BitmapRectangle.OldHeight; x = BitmapRectangle.OldX - (width - BitmapRectangle.OldWidth); } } if(dragGriper == Griper.NorthEast) { width = BitmapRectangle.OldWidth + xMove; y = BitmapRectangle.OldY + yMove; height = BitmapRectangle.OldHeight - yMove; if(isRatioMaintained) { width = BitmapRectangle.OldWidth * height / BitmapRectangle.OldHeight; } } if(dragGriper == Griper.SouthWest) { x = BitmapRectangle.OldX + xMove; width = BitmapRectangle.OldWidth - xMove; height = BitmapRectangle.OldHeight + yMove; if(isRatioMaintained) { width = BitmapRectangle.OldWidth * height / BitmapRectangle.OldHeight; x = BitmapRectangle.OldX - (width - BitmapRectangle.OldWidth); } } if(width <= 1 || height <= 1) { isMouseDownForSizeChange = false; startPoint = new Point(BitmapRectangle.Rectangle.Left, BitmapRectangle.Rectangle.Top); endPoint = new Point(BitmapRectangle.Rectangle.Right, BitmapRectangle.Rectangle.Bottom); BitmapRectangle.UpdatePosition(); return; } BitmapRectangle.X = x; BitmapRectangle.Width = width; BitmapRectangle.Y = y; BitmapRectangle.Height = height; InvalidatePictureBox(); } } |