2010-10-15 82 views

Trả lời

16

Nếu bạn đã quen thuộc với util.List của Java, sự khác biệt giữa Hình ảnh và BufferedImage giống như sự khác biệt giữa Danh sách và LinkedList.

Hình ảnh là khái niệm chung và BufferedImage là triển khai cụ thể của khái niệm chung; giống như BMW là một chiếc xe hơi.

13

Hình ảnh là lớp trừu tượng. Bạn không thể khởi tạo trực tiếp hình ảnh. BufferedImage là một hậu duệ, và bạn có thể khởi tạo nó. Vì vậy, nếu bạn hiểu các lớp trừu tượng và thừa kế, bạn sẽ hiểu khi nào nên sử dụng từng lớp.

Ví dụ: nếu bạn đang sử dụng nhiều hình ảnh con cháu, chúng sẽ chia sẻ một số thuộc tính phổ biến, được kế thừa từ Hình ảnh.

Nếu bạn muốn viết một hàm rằng sẽ mất một trong hai loại hậu duệ như một tham số bạn có thể làm một cái gì đó như thế này:

function myFunction(Image myImage) { 
    int i = myImage.getHeight(); 
    ... 
} 

Sau đó, bạn có thể gọi hàm bằng cách đi qua nó một BufferedImage hoặc một VolatileImage.

BufferedImage myBufferedImage; 
VolatileImage myVolatileImage; 
... 
myFunction(myVolatileImage); 
myFunction(myBufferedImage); 

Bạn sẽ không chuyển đổi hình ảnh thành BufferedImage vì bạn sẽ không bao giờ có hình ảnh.

7

Sự khác nhau giữa ImageBufferedImage là gì?

Như đã nêu trong các hướng dẫn của Oracle Java để làm việc với hình ảnh

  • Lớp java.awt.Image là lớp cha đại diện cho hình ảnh đồ họa như mảng hình chữ nhật của pixel.
  • Lớp java.awt.image.BufferedImage, mở rộng lớp Hình ảnh để cho phép ứng dụng hoạt động trực tiếp với dữ liệu hình ảnh (ví dụ: truy xuất hoặc thiết lập màu pixel). Các ứng dụng có thể trực tiếp xây dựng các cá thể của lớp này.

Lớp BufferedImage là nền tảng của API hình ảnh chế độ tức thì Java 2D. Nó quản lý hình ảnh trong bộ nhớ và cung cấp các phương thức lưu trữ, giải thích và lấy dữ liệu pixel. Vì BufferedImage là một lớp con của Image, nó có thể được render bởi các phương thức Graphics và Graphics2D chấp nhận tham số Image.

BufferedImage về cơ bản là Hình ảnh có bộ đệm dữ liệu có thể truy cập. Do đó, hiệu quả hơn để làm việc trực tiếp với BufferedImage. BufferedImage có một ColorModel và Raster của dữ liệu hình ảnh. ColorModel cung cấp giải thích màu sắc cho dữ liệu pixel của hình ảnh.


Tôi có thể tạo một BufferedImage trực tiếp từ một nguồn Image "image.png"?

Chắc chắn.

BufferedImage img = ImageIO.read(getClass().getResource("/path/to/image")); 
Các vấn đề liên quan