Менять местами красный и зеленый?

1

Когда я выполняю этот код, меняется только зеленое значение. Красное значение остается неизменным. Почему это и что мне делать?

Intial RGB: 90: 123: 92 Новый RGB должен быть: 123: 90: 92 Сейчас я получаю: 90:90:92

var img = new SimpleImage("smalllion.jpg");
var pix = img.getPixel(0,0);
print(img)
print("orginal rgb " + pix)

function swapRedGreen(pixel){
    for(var pixel of img.values()){
        var newG = pixel.getRed();
        pixel.setGreen(newG)
        var newR = pixel.getGreen();
        pixel.setRed(newR);
    }
}
swapRedGreen("smalllion.jpg")
print(img)
var pix1 = img.getPixel(0,0);
print(pix1)
  • 0
    вы читаете зеленый сразу после того, как вы изменили его на красное значение
  • 0
    что-то говорит мне, что при манипулировании непосредственно пиксельными данными эта операция будет в 10 раз быстрее. Хорошее начало: stackoverflow.com/questions/8751020/…
Теги:

2 ответа

0
Лучший ответ

Проблема. Возможно, это связано с тем, что в строке 9 вы назначаете пикселю зеленое значение, которое затем извлекаете в строке 10 для преобразования в красный цвет. Вы по существу конвертируете красный → зеленый, а затем зеленый → красный.

Решение: Попробуйте переключить линии 9 и 10.

  • 0
    Итак, вот как это работает. В моем исходном коде значение сохраняется зеленым, а красный - новым зеленым значением. Благодарю.
1

Причина в том, что вы вызывали var newR = pixel.getGreen(); , green уже установлен на red цвет. Вместо этого сохраните исходный зеленый и красный переменные в начале.

Попробуйте это вместо этого:

function swapRedGreen(pixel) {
    for (var pixel of img.values()) {
        var oldRed = pixel.getRed();
        var oldGreen = pixel.getGreen();

        pixel.setGreen(oldRed);
        pixel.getRed(oldGreen);
    }
}
  • 0
    Итак, мне нужно сначала сохранить значение, а затем сохранить его. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню