の続きです。
BitmapRectangleにプロパティを追加します。幅や高さが変更されたときは表示されているビットマップも変更される必要があります。そこでそのための処理を追加しています。
Width、Height、Sizeといったプロパティは単に矩形のサイズを変更しているだけではありません。SetNewBitmapWhenSizeChangeメソッドを呼び出すことで表示されるビットマップも変更させています。
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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
public class BitmapRectangle { public BitmapRectangle(Bitmap bitmap, Rectangle rectangle) { Bitmap = bitmap; Rectangle = rectangle; OldBitmap = bitmap.Clone(new Rectangle(0, 0, bitmap.Width, bitmap.Height), System.Drawing.Imaging.PixelFormat.Format32bppArgb); OldX = rectangle.X; OldY = rectangle.Y; OldWidth = rectangle.Width; OldHeight = rectangle.Height; } public void UpdateSize() { OldX = X; OldY = Y; OldWidth = Width; OldHeight = Height; } public Bitmap OldBitmap { private set; get; } = null; public int OldX { private set; get; } public int OldY { private set; get; } public int OldWidth { private set; get; } public int OldHeight { private set; get; } public void Dispose() { Bitmap.Dispose(); if(OldBitmap != null) OldBitmap.Dispose(); } public Bitmap Bitmap { set; get; } public Rectangle Rectangle { private set; get; } public int X { set { Rectangle rect = Rectangle; rect.X = value; Rectangle = rect; } get { return Rectangle.X; } } public int Y { set { Rectangle rect = Rectangle; rect.Y = value; Rectangle = rect; } get { return Rectangle.Y; } } public Point Location { set { Rectangle rect = Rectangle; rect.Location = value; Rectangle = rect; } get { return Rectangle.Location; } } public Size Size { set { Rectangle rect = Rectangle; rect.Size = value; Rectangle = rect; SetNewBitmapWhenSizeChange(new Size(rect.Width, rect.Height)); } get { return Rectangle.Size; } } void SetNewBitmapWhenSizeChange(Size size) { Bitmap newBitmap = new Bitmap(size.Width, size.Height); Graphics g = Graphics.FromImage(newBitmap); g.DrawImage(OldBitmap, new Rectangle(0, 0, size.Width, size.Height), new Rectangle(0, 0, OldBitmap.Width, OldBitmap.Height), GraphicsUnit.Pixel); g.Dispose(); Bitmap.Dispose(); Bitmap = newBitmap; } public int Width { set { Rectangle rect = Rectangle; rect.Width = value; Rectangle = rect; SetNewBitmapWhenSizeChange(new Size(rect.Width, rect.Height)); } get { return Rectangle.Width; } } public int Height { set { Rectangle rect = Rectangle; rect.Height = value; Rectangle = rect; SetNewBitmapWhenSizeChange(new Size(rect.Width, rect.Height)); } get { return Rectangle.Height; } } } |
これでBitmapRectangle.WidthプロパティやBitmapRectangle.Heightプロパティを適切にセットすることで選択領域のサイズと位置にあわせてイメージが表示されるようになります。