- Сообщения
- 976
- Реакции
- 273
Подскажите, как сделать уровень CMYK8. Скрипт ИИ написал/переписывал, но не работает. Ошибок не выдаёт, как и результата.
Должно получиться так:
Sub ApplyLevels_64bit_Version()
Dim p As Page
Dim s As Shape
' Работаем на активной странице
Set p = ActivePage
' Отключаем обновление экрана
Optimization = True
' Запускаем рекурсивную функцию обработки для всех объектов
ProcessShapes p.Shapes
Optimization = False
ActiveWindow.Refresh
MsgBox "Готово! Все изображения на странице обработаны.", vbInformation
End Sub
' Рекурсивная процедура для захода внутрь групп и PowerClip
Private Sub ProcessShapes(ss As Shapes)
Dim s As Shape
For Each s In ss
If s.Type = cdrBitmapShape Then
' 1. Применяем конвертацию в CMYK для 64-битной версии
s.Bitmap.ConvertTo cdrCMYKColorImage
' 2. Используем метод принудительного изменения через параметры эффекта
' Для 64-бит версии лучше всего работает вызов свойств через .Parameters
On Error Resume Next
Dim eff As Effect
Set eff = s.Bitmap.Effects.Add(cdrLevelsEffect)
If Not eff Is Nothing Then
eff.Parameters("Black").Value = 8
eff.Parameters("White").Value = 255
eff.Parameters("Gamma").Value = 1#
eff.Apply
' Завершаем (запекаем)
s.Bitmap.Effects.Commit
End If
On Error GoTo 0
ElseIf s.Type = cdrGroupShape Or s.Type = cdrTextShape Then
' Если это группа, заходим внутрь рекурсивно
ProcessShapes s.Shapes
ElseIf s.Type = cdrPowerClipFrame Then
' Если это PowerClip, заходим внутрь
ProcessShapes s.PowerClip.Shapes
End If
Next s
End Sub
Должно получиться так:
Sub ApplyLevels_64bit_Version()
Dim p As Page
Dim s As Shape
' Работаем на активной странице
Set p = ActivePage
' Отключаем обновление экрана
Optimization = True
' Запускаем рекурсивную функцию обработки для всех объектов
ProcessShapes p.Shapes
Optimization = False
ActiveWindow.Refresh
MsgBox "Готово! Все изображения на странице обработаны.", vbInformation
End Sub
' Рекурсивная процедура для захода внутрь групп и PowerClip
Private Sub ProcessShapes(ss As Shapes)
Dim s As Shape
For Each s In ss
If s.Type = cdrBitmapShape Then
' 1. Применяем конвертацию в CMYK для 64-битной версии
s.Bitmap.ConvertTo cdrCMYKColorImage
' 2. Используем метод принудительного изменения через параметры эффекта
' Для 64-бит версии лучше всего работает вызов свойств через .Parameters
On Error Resume Next
Dim eff As Effect
Set eff = s.Bitmap.Effects.Add(cdrLevelsEffect)
If Not eff Is Nothing Then
eff.Parameters("Black").Value = 8
eff.Parameters("White").Value = 255
eff.Parameters("Gamma").Value = 1#
eff.Apply
' Завершаем (запекаем)
s.Bitmap.Effects.Commit
End If
On Error GoTo 0
ElseIf s.Type = cdrGroupShape Or s.Type = cdrTextShape Then
' Если это группа, заходим внутрь рекурсивно
ProcessShapes s.Shapes
ElseIf s.Type = cdrPowerClipFrame Then
' Если это PowerClip, заходим внутрь
ProcessShapes s.PowerClip.Shapes
End If
Next s
End Sub
Вложения
Последнее редактирование:
. Ну я не так глубоко ныряю. По F8 всё проходит без сучка и задоринки, а результата нет. Потому и обратился.