Bitmap là kiểu hình ảnh cơ bản trong C#, thông qua bitmap và picture box bạn có thể tạo giải quyết hầu hết các vấn đề vể hiển thị hình ảnh mà không cần dùng thêm thư viện.
Mục lục
1. Crop bitmap
Hàm bên dưới truyền vào một bitmap và vùng chữ nhật. Đầu tiên cần kiểm tra hình chữ nhật có hợp lệ không (diện tích phải lớn hơn 0) và có nằm trong bitmap hay không.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public static Bitmap CropBitmap(Bitmap bmp, Rectangle rect) { if (bmp == null) return null; if (rect.Width == 0 || rect.Height == 0) return bmp; if (rect.X + rect.Width > bmp.Width || rect.Y + rect.Height > bmp.Height) return bmp; Bitmap target = new Bitmap(rect.Width, rect.Height); using (Graphics g = Graphics.FromImage(target)) { g.DrawImage(bmp, new Rectangle(0, 0, target.Width, target.Height), rect, GraphicsUnit.Pixel); } return target; } |
2. Clone bitmap
Clone bitmap néu dùng hàm bên dưới là không thật sự clone:
1 2 |
Bitmap bmp1 = new Bitmap(); Bitmap bmp2 = bmp1.Clone(); |
Cách này cũng không đúng trong một số trường hợp multithreading
1 2 |
Bitmap bmp1 = new Bitmap(); Bitmap bmp2 = new Bitmap(bmp1); |
Cách đúng là viết hàm để clone, khi đó bitmap mới thật sự clone. Phải dùng cách bên dưới để clone bitmap khi chạy multithreading.
1 2 3 4 5 6 7 8 9 10 11 12 |
Bitmap CloneBitmap(Bitmap source) { if (source == null) return null; return new Bitmap(source); } void main() { Bitmap bmp1 = new Bitmap(); Bitmap bmp2 = CloneBitmap(bmp1); } |