Tôi đang tạo một phương thức lấy hai tham số, hai chỉ số, bắt đầu và kết thúc, lấy vị trí của ảnh đang được chỉnh sửa và chuyển đổi các pixel đó thành các màu khác nhau. Sử dụng vòng lặp while để đánh chỉ mục phần đầu và phần cuối.
Vấn đề tôi gặp phải là tôi chỉ cần một phần nhỏ để thay đổi màu sắc:
Đừng bận tâm đến một số mã nhận xét. Tôi đã thử rất nhiều thứ khác nhau.
public void âm (int bắt đầu, int kết thúc)
{
Pixel[] pixelArray = this.getPixels(); //chỉ số pixelarray
Pixel pixel = null;
// int chiều cao = this.getHeight();
//int PaintPoint = chiều cao / 2;
//int width = this.getWidth();
int i = 0;
int đỏ, lục, lam = 0;
// int x = 0;
Pixel topPixel = null;
Pixel đáyPixel = null;
//int startY;
//int startX;
int y = bắt đầu;
int x = kết thúc;
// số int;
while( y < this.getHeight())
{
y++;
while (x < this.getWidth()) // lặp qua chỉ mục
{
pixel = this.getPixel(x,y);
đỏ = pixel.getRed();
green = pixel.getGreen();//thu thập màu xanh lục
blue = pixel.getBlue();//thu thập màu xanh lam
Color negColor = new Color(255 - red, 255 - green, 255 - blue);//đặt giá trị mới của pixel
pixel.setColor(negColor);
x++;
//đếm = đếm + 1;
i++;//tiếp tục lập chỉ mục
}
}
}
Hình ảnh là 2D, nhưng bạn coi nó là 1D (lưu ý rằng nó không bao giờ đặt lại về giá trị tối thiểu sau khi lặp qua x bên trong). Nếu bạn muốn tô màu một hình chữ nhật tùy ý trong một ảnh nhất định, các tham số phải chứa hai điểm: minx, miny và maxx maxy, sau đó cặp vòng lặp 2D của bạn sẽ truy cập từng điểm trong khu vực theo từng hàng.
// thực hiện kiểm tra độ tỉnh táo trên parms của bạn
if (this.getWidth() < maxx) {
maxx = this.getWidth();
}
if (this.getHeight() < maxy) {
maxy = this.getHeight();
}
nếu (minx < 0) {
tối thiểu = 0;
}
nếu (min < 0) {
tối thiểu = 0;
}
for (y = mixy; y < maxy; y++) {
cho (x = mixx; x < maxx; x++) {
// bây giờ bạn có giá trị x và y hợp lệ
}
}
Tôi là một lập trình viên xuất sắc, rất giỏi!