Почему мой алгоритм смазывания изображения делает изображение темнее? - PullRequest
1 голос
/ 22 октября 2010

Я пытаюсь написать графический эффект, в котором кружок движется вокруг изображения, смазывая изображение, как оно есть (например, как бы работал инструмент smudge в Gimp или Photoshop).Основной алгоритм, который я использую:

  1. круг перемещается из положения A в положение B на растровом изображении
  2. копирует круг пикселей из положения A во временное растровое изображение
  3. нарисуйте этот круг пикселей из временного растрового изображения в положение B, используя альфа около 50%.

Это работает нормально и выглядит так, как я ожидал, где изображение будет выглядеть так, как будто оносмазывание, если круг перемещается на 1 пиксель за раз по изображению.

Теперь я хочу добавить текстуру к эффекту пятна.У меня есть растровое изображение, которое содержит картинку с краской.Алгоритм, описанный выше, изменен на следующий, поэтому пятно принимает форму этого объекта рисования:

  1. , как и раньше
  2. , замените временные растровые пиксели текстурой объекта рисования, затем скопируйтекруг пикселей из положения A во временное растровое изображение, но сохраняйте только те пиксели, которые совпадают с пикселями пятна краски (т. е. используйте режим «источник в месте назначения» Porter-Duff при рисовании круга во временное растровое изображение).
  3. как и раньше

Это почти работает, и выглядит поначалу нормально, но постепенно пятно делает цвета в моем изображении темнее!Если круг проходит над одной и той же областью несколько раз, цвета в конечном итоге изменятся на черный.Есть идеи, что я могу делать не так?

Я реализовал вышеупомянутое в Android.Я случайно натолкнулся на этот пост о том, что растровые изображения в Android (например, моя текстура с краской) загружаются с «предварительно умноженной альфа», где автор говорит, что из-за этого его изображения становятся темнее: http://www.kittehface.com/2010/06/androidbitmap-and-premultiplied-alpha.html

Я подозреваю,У меня похожая проблема, но я не понимаю, что происходит достаточно хорошо, и не знаю, как ее исправить.У кого-нибудь есть намеки на то, что может происходить?

1 Ответ

2 голосов
/ 22 октября 2010

Ну, с первого взгляда причина, по которой изображение становится темнее, заключается в том, что № 3 на первых трех шагах. Вы накладываете пиксель поверх существующего пикселя на 50%. Вы можете рассмотреть возможность использования среднего значения исходного пикселя и нового значения пикселя. Возможно, вы захотите изучить некоторые алгоритмы размытия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...