Vì vậy, trong một BufferedImage
, bạn nhận được một số nguyên duy nhất có giá trị RGB được biểu thị trong đó. Cho đến nay tôi sử dụng những điều sau đây để lấy các giá trị RGB từ nó:Chuyển đổi giá trị RGB thành Số nguyên
// rgbs is an array of integers, every single integer represents the
// RGB values combined in some way
int r = (int) ((Math.pow(256,3) + rgbs[k])/65536);
int g = (int) (((Math.pow(256,3) + rgbs[k])/256) % 256);
int b = (int) ((Math.pow(256,3) + rgbs[k]) % 256);
Và cho đến nay, nó hoạt động.
Những gì tôi cần làm là tìm ra cách lấy số nguyên để tôi có thể sử dụng BufferedImage.setRGB()
, vì nó có cùng loại dữ liệu mà nó đã cho tôi.
Tôi không nghĩ bạn cần một int trên hai dòng thứ hai. Và dòng thứ ba được cho là "rgb = ...", đúng không? –
Nó là một số nguyên duy nhất. Một số nguyên chứa 32 bit. 8 bit đầu tiên cho giá trị alpha (bằng 0). 8 tiếp theo cho màu đỏ, sau đó 8 tiếp theo cho màu xanh lá cây và 8 tiếp theo cho màu xanh. Thử nó. Nếu đầu ra cuối cùng bằng với đầu vào ban đầu thì bạn biết việc chuyển đổi đã được thực hiện đúng. – camickr
Erm, tôi nghĩ nó sẽ phụ thuộc vào độ sâu màu. Ví dụ của bạn trông giống như màu 24-bit với tôi (8 bit cho mỗi kênh) - đó là những gì 'BufferedImage' mong đợi? –