Задать вопрос
mk3mk
@mk3mk
занимаюсь вёрсткой (иногда)

Макрос в Coreldraw Для создания эффекта Halftone?

Всем привет!
Мне нужно создать Макрос в Coreldraw Для создания эффекта Halftone.
Чтобы я мог задавать максимальный и минимальный диаметр кружочков, их шаг и направление, например, квадратное, или под углом 60 градусов и т.д.
И чтобы на выходе я мог это сохранить в вектор. Например в DFX, SVG и т.д.
Исходное изображение может быть как растровым, так и векторным.
В конечном итоге должна получиться перфорация из кружочков разного размера.
6875182952864902047609.png
И я написал вот немного кода, с помощью которого создается массив кружочков, потом каждый кружок проверяет цвет фона, на котором он расположен и в зависимости от интенсивности цвета он меняет свой размер.
Возникает ошибка
Compile error Syntax error в строке
Dim circle As Shape
Хотя библиотека CorelDRAW Object Library подключена, вот код
Sub CreateCirclesByBrightness()
    Dim minDiameter As Double: minDiameter = 5
    Dim maxDiameter As Double: maxDiameter = 15
    Dim stepSize As Double: stepSize = 20
    Dim circlesLayer As layer
    Dim bgLayer As layer
    Dim doc As Document
    Dim x As Double, y As Double
    Dim brightness As Double
    Dim diameter As Double
    Dim circle As Shape 'тут возникает ошибка
    Dim bounds As Rect

    Set doc = ActiveDocument
    Set bgLayer = doc.Layers("Background")
    
    ' Удаляем или создаём слой Circles
    On Error Resume Next
    Set circlesLayer = doc.Layers("Circles")
    If Not circlesLayer Is Nothing Then
        circlesLayer.Shapes.All.Delete
    Else
        Set circlesLayer = doc.Layers.Add("Circles")
    End If
    On Error GoTo 0

    ' Получаем границы векторного изображения на слое Background
    bounds = bgLayer.Shapes.All.CreateSelectionRange.BoundingBox

    ' Цикл по координатам с шагом stepSize
    For y = bounds.Top To bounds.Bottom Step stepSize
        For x = bounds.Left To bounds.Right Step stepSize
            ' Анализ яркости под точкой (x, y)
            brightness = GetBrightnessAtPoint(x, y, bgLayer)
            ' Интерполяция диаметра
            diameter = minDiameter + (maxDiameter - minDiameter) * brightness
            ' Создаём кружок
            Set circle = circlesLayer.CreateEllipse2(x, y, diameter / 2, diameter / 2)
            circle.Fill.UniformColor.RGBAssign 128, 128, 128 ' Серый цвет, например
            circle.Outline.SetNoOutline
        Next x
    Next y
End Sub

Function GetBrightnessAtPoint(x As Double, y As Double, layer As layer) As Double
    ' Здесь реализуйте получение яркости в точке (x, y)
    ' Возвращайте значение от 0 (черный) до 1 (белый)
    ' Можно использовать экспорт в Bitmap и анализ пикселей, либо API CorelDRAW
    ' Заглушка:
    GetBrightnessAtPoint = 0.5
End Function

Корел 2024
  • Вопрос задан
  • 324 просмотра
Подписаться 3 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы