Эффект мелка с помощью iPhone - PullRequest
3 голосов
/ 28 июня 2011

Я работаю над приложением, которое позволяет пользователю заполнить цвет на чертеже, используя палец в качестве карандаша. Кто-нибудь может помочь мне создать эффект мелка? Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 30 июля 2011

Стандартные вызовы Quartz, которые вы будете использовать в drawRect: на самом деле не дадут вам эффекта мелка, который вы ищете, используя любое поведение по умолчанию.

Самая простая реализация, которая поможет вам разобраться, по крайней мере, простоПриступая к работе, можно было бы создать серию прозрачных цветных текстур.В Photoshop, Fireworks и многих других приложениях для рисования уже есть кисти и стили линий для создания цветных эффектов, поэтому вы можете просто поиграть с несколькими из них на прозрачном фоне, чтобы получить несколько выполнимых «пятен» (маленькие круглые карандаши, выглядящие прозрачными PNG).

Затем, когда пользователь проводит пальцем по устройству, запишите путь и нарисуйте эти «пятна» вдоль пути.Если человек рисует взад-вперёд, больше будет положено, и вы получите более темный (более сплошной / менее прозрачный) цвет.

Это очень грубый, но общий подход к этой проблеме.Вы могли бы стать действительно умными с помощью масок, шаблонов, градиентов и других методов Quartz, но сложность доставки того, что вы хотите, вероятно, перевесит простоту подхода к изображениям.

Некоторые рекомендации, чтобы получить лучший эффектвозможные:

  1. Вы можете использовать HSV (Hue-Saturation-Value), чтобы создать диапазон цветовых вариаций из одного исходного набора изображений, чтобы получить различные цвета карандаша.Это может быть сделано в коде или в вашей графической программе.
  2. Добавление очень светлых теней серого в изображения может придать им глубину и шероховатость, которые будут сохранены, даже если вы много раз наложите изображения, исерая шкала не будет отфильтрована при настройке HSV.Это препятствует тому, чтобы карандаш стал сплошным цветом.
  3. Запишите свой путь, (x, y), размер, выбор "пятна" и цвет непрерывно, когда человек перетаскивает, однако, разбейте его на сегменты на основепри касании / увеличении или максимальном размере, таким образом вы можете предоставить пошаговую функциональность «отменить».
  4. Вы можете преобразовать «сегменты» из (3) в одно изображение, передав их ввне экрана буфера.Это позволит вам перерисовать весь фрагмент всего несколькими прозрачными изображениями вместо тысяч маленьких «пятен» каждый раз.
  5. Если вы знакомы с OpenGL, вы можете получить хороший прирост производительности даже для 2D, потому что он может манипулировать исходными изображениями "splotch", рендерингом за пределами экрана и наложением слоев с гораздо меньшим количеством кода, чем вы должны делать вCoreGraphics.К сожалению, установка OpenGL добавляет массу кода и может быть очень запутанной.

Надеюсь, это было достаточно ясно и дает вам некоторые идеи.

Имейте в виду, как только вы освоите этот подходВы можете рисовать с чем угодно.Вместо цветных текстур у вас может быть неоновое свечение, звезды, эффекты частиц и почти все, что вы можете себе представить.

0 голосов
/ 20 июня 2019

попробуйте

class myView {

var crayon = UIColor(patternImage: UIImage(named: "acrayontexture")!)

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { firstTouch = (touches.first?.location(in: self))! aPath.move(to: firstTouch)

} 

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    if firstTouch != lastTouch {
        lastTouch = (touches.first?.location(in: self))! ;
         aPath.addLine(to: lastTouch)

        setNeedsDisplay()
        }
 override func draw(_ rect: CGRect) {

    let context = UIGraphicsGetCurrentContext() ;
    context?.addPath(aPath)
    context?.setLineWidth(10.0)
    context?.setStrokeColor(crayon.cgColor) ;
    context?.setLineCap(.round)
    context?.setShadow(offset: CGSize(width: 5.0 , height: 4.0), blur: 4.0) ;
    //
    context?.strokePath()

}

    }    
}

`

0 голосов
/ 28 июня 2011

Вы можете обратиться к приведенной ниже ссылке для начала.Здесь вы можете изменить цвет пера или цвет карандаша, указав значения RGB, приведенные в руководстве.

http://www.ifans.com/forums/showthread.php?t=132024

Вы можете предоставить кнопки на экране, представляющие разные цвета, и, основываясь на нажатой кнопке, вы можете установить значения RGB вашего текущего пера и подать цвет, используя руку.

Надеюсь, это поможет вам.

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