2009-06-03 46 views
57

Tôi gặp khó khăn khi hiểu sự khác biệt giữa lớp Image và lớp Bitmap. Bây giờ, tôi biết rằng các Bitmap kế thừa từ Image nhưng từ những gì tôi hiểu cả hai đều rất giống nhau. Có ai có thể làm sáng tỏ điều này không?Hình ảnh so với lớp bitmap

+2

Người qua đường: có một câu trả lời đúng hơn [ở đây] (http://stackoverflow.com/a/19678330/3367144) – kdbanman

+2

Có thể trùng lặp của [Sự khác nhau giữa System.Drawing.Image và System.Drawing.Bitmap là gì ?] (http://stackoverflow.com/questions/19678195/what-is-the-difference-between-system-drawing-image-and-system-drawing-bitmap) –

Trả lời

57

Lớp Bitmap là triển khai lớp Hình ảnh. Lớp Image là một lớp trừu tượng;

Lớp Bitmap chứa 12 hàm tạo xây dựng đối tượng Bitmap từ các tham số khác nhau. Nó có thể xây dựng Bitmap từ một bitmap khác và địa chỉ chuỗi của hình ảnh.

Xem thêm in this comprehensive sample.

+5

Tôi nghĩ bạn có nghĩa là triển khai hình ảnh trừu tượng lớp học. – kenny

11

Hình ảnh cung cấp quyền truy cập trừu tượng vào hình ảnh tùy ý, nó xác định một tập hợp các phương pháp có thể áp dụng lôgic khi thực hiện bất kỳ hình ảnh nào. Nó không bị ràng buộc với bất kỳ định dạng hình ảnh cụ thể hoặc thực hiện. Bitmap là một triển khai cụ thể cho lớp trừu tượng hình ảnh đóng gói đối tượng bitmap của Windows GDI. Bitmap chỉ là một triển khai cụ thể cho lớp trừu tượng hình ảnh mà chuyển tiếp trên đối tượng bitmap GDI.

Ví dụ: Bạn có thể tạo triển khai của riêng bạn thành Tóm tắt hình ảnh, bằng cách kế thừa từ lớp Hình ảnh và triển khai phương pháp trừu tượng.

Dù sao, đây chỉ là một cách sử dụng cơ bản đơn giản của OOP, nó không phải là khó nắm bắt.

32

Đây là cách làm rõ vì tôi đã thấy mọi thứ được thực hiện bằng mã thành thật khó hiểu - tôi nghĩ ví dụ sau có thể hỗ trợ người khác.

Như những người khác đã nói trước đây - Bitmap kế thừa từ Tóm tắt ảnh lớp

Tóm tắt một cách hiệu quả có nghĩa là bạn không thể tạo một đối tượng mới() của nó.

Image imgBad1 = new Image();  // Bad - won't compile 
    Image imgBad2 = new Image(200,200); // Bad - won't compile 

Nhưng bạn có thể làm như sau:

Image imgGood; // Not instantiated object! 
    // Now you can do this 
    imgGood = new Bitmap(200, 200); 

Bây giờ bạn có thể sử dụng imgGood như bạn sẽ đối tượng bitmap tương tự nếu bạn đã thực hiện những điều sau:

Bitmap bmpGood = new Bitmap(200,200); 

Các điều tốt đẹp ở đây là bạn có thể vẽ đối tượng imgGood bằng cách sử dụng một đối tượng Đồ họa

Graphics gr = default(Graphics); 
    gr = Graphics.FromImage(new Bitmap(1000, 1000)); 
    Rectangle rect = new Rectangle(50, 50, imgGood.Width, imgGood.Height); // where to draw 
    gr.DrawImage(imgGood, rect); 

Đây imgGood có thể bất kỳ đối tượng Image - Bitmap, Metafile, hoặc bất cứ điều gì khác mà thừa hưởng từ hình ảnh!

Các vấn đề liên quan