Làm cách nào để lấy tệp hình ảnh và chuyển đổi nó thành raster và sau đó truy cập dữ liệu của nó (giá trị RBG) pixel theo pixel?Làm cách nào để lấy một tệp hình ảnh và chuyển đổi nó thành một raster và sau đó truy cập dữ liệu của nó?
Trả lời
BufferedImage img = ImageIO.read(new File("lol"));
int rgb = img.getRGB(x, y);
Color c = new Color(rgb);
Bây giờ bạn có thể sử dụng Color.getRed(), getGreen(), getBlue() và getAlpha() để có được những giá trị khác nhau
Sử dụng ImageIO.read
để đọc các tập tin hình ảnh trong như một BufferedImage
, và sau đó sử dụng một trong các phương pháp getData
để có được hình ảnh Raster
của hình ảnh. Và trong đó, bạn sẽ tìm thấy các phương thức để lấy dữ liệu pixel.
BufferedImage image = ImageIO.read(new File(myFilename));
int pixel = image.getRGB(0, 0); // Top left pixel.
// Access the color components, valued 0-255.
int alpha = (pixel >>> 24) & 0xff; // If applicable to image format.
int r = (pixel >>> 16) & 0xff;
int g = (pixel >>> 8) & 0xff;
int b = pixel & 0xff;
[Chỉnh sửa] Lưu ý rằng @ câu trả lời Sibbo là đúng và thuận tiện sử dụng Color
class color accessor methods; tuy nhiên, việc trích xuất các màu trực tiếp thông qua thao tác bit như tôi đã chứng minh có thể sẽ nhanh hơn đáng kể vì nó tránh được sự phí tổn của các cuộc gọi hàm dựng lặp lại.
Không sử dụng các giá trị rgb sau khi bạn hoàn thành chuyển hình ảnh vào một raster sử dụng rasters .getData
phương pháp
Sử dụng này:
Image img.getRGB(x, y);
Color c = new Color(rgb);
int r = (pixel >>> 16) & 0xff; int g = (pixel >>> 8) & 0xff; int b = pixel & 0xff; các dòng mã này làm gì? và toán tử & toán tử hoặc 0xff có nghĩa là gì – lancegerday
@lancegerday: các dòng đó trích xuất các giá trị màu riêng lẻ (r, g, b, a) từ giá trị [pixel RGBA tổng hợp "] (http://en.wikipedia.org/wiki/RGBA_color_space) để bạn có thể dễ dàng kiểm tra từng cá nhân dưới dạng giá trị từ 0 đến 255. – maerics