Расширение графических возможностей VFP средствами GDI+
Вниманию коллег, испытывающих трудности при работе с графикой, предлагается написанный на фоксе
класс. Реализует работу с графическими файлами различных форматов, а так же позволяет программно
создавать рисунки. Прилагается описание и демонстрационный пример.
В архиве нет заголовочных файлов - типа gdipluspen.h и т.д. ;-((
Но примеры - впечатляет - надо использовать эти возможности - ведь не только на Дельфи можно
что-нить соорудить.
Best regards
Сергей Коноплев
10.09.04 15:28:18
К автору: положите, пож., обновленный архив с *.h-файлами.
Вячеслав Клепинин
10.09.04 16:40:31
Заменил архив. По ходу были исправленные найденные народом ошибки. Всем спасибо за участие!
Вячеслав Клепинин
16.09.04 09:31:56
to Ashu
Смотрите демонстрашку, код метода Click кнопки "Дополнительные возможности". Портрет светлеет
потому, что его закрашиваем полупрозрачной кистью.
to All
Есть одна ошибочка, возникающая при сборке приложения в EXE, о не найденной ссылке на массив. Для
её устранения в методах DrawPolygon и DrawFillPolygon после строки PARAMETERS добавьте строку
EXTERNAL ARRAY taPoint
Ashu
15.09.04 18:56:34
А можно полупрозрачную кисть наложить уже на существующий объект?
Например на картинку объекта Image
Sim
13.04.05 11:12:36
Iinit demogdiplus
Declare Long GetWindow in Win32API Long, Long
PUBLIC GW_CHILD
GW_CHILD = 5
IF This.ShowWindow = 2
Thisform.nHWnd = GetWindow(This.HWnd,GW_CHILD)
ELSE
Thisform.nHWnd = This.HWnd
ENDIF
For Exe file with window As Top Level form
Starpom
02.08.05 06:10:23
В файле .prg в функции присваивания параметров в зависимости на какой угол повернут помимо
передающихся значений 0,1,2,3 есть еще значения:
4 - кажись зеркальное отображение картинки, 5, 6 и 7.
Извините что так скомкано!
Starpom
02.08.05 06:12:10
В файле .prg в функции присваивания параметров в зависимости на какой угол повернут помимо
передающихся значений 0,1,2,3 есть еще значения:
4 - кажись зеркальное отображение картинки, 5, 6 и 7.
Извините что так скомкано!
TAS
07.02.06 16:45:07
Думаю одну из функций можно переделать следующим образом:
*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* Повернуть изображение на угол, кратный 90 градусов и (или) отразить по горизонтали
*+
FUNCTION RotateImage(tnRotate,tnFlipX)
LOCAL lnRotate
IF this.nativeImage = 0
this.ErrorCode = 6 && ERROR: Нет дескриптора изображения
ELSE
IF VARTYPE(tnRotate) != 'N'
this.ErrorCode = 2
ELSE
DO CASE
CASE tnRotate = 0
lnRotate = 0
CASE tnRotate = 90
lnRotate = 1
CASE tnRotate = 180
lnRotate = 2
CASE tnRotate = 270
lnRotate = 3
OTHERWISE
this.ErrorCode = 13 && ERROR: Недопустимое значение угла поворота изображения
RETURN this.ErrorCode
ENDCASE
IF TYPE("tnFlipX")="N" AND tnFlipX=1
lnRotate = lnRotate+4
ENDIF
IF GdipImageRotateFlip(this.nativeImage, lnRotate) = 0
this.ErrorCode = 0
ELSE
this.ErrorCode = 15 && ERROR: Ошибка при вращении изображения
ENDIF
ENDIF
ENDIF
RETURN this.ErrorCode
ENDFUNC
demul
12.08.06 08:48:16
Как создать GPImage из базы (из GENERAL,есть из файла CreateFromFile)?
Honey
17.01.07 17:11:55
Добрый день.
Скачала Ваш класс.
Очень полезная вещь. Большое спасибо!
Есть два вопроса:
1. Я долго и упорно передавала в функцию CopyToFile разные значения tnMode, но не видела никакой
разницы в сохраненом изображении. В связи с этим изображения получались не того качества, которого
бы хотелось.
Потом нашла в функции GoResizeImage строку:
GdipSetInterpolationMode(graphics, 0),
где на месте нуля должна (на мой взгляд) стоять переменная tnMode.
Заменила на
GdipSetInterpolationMode(graphics, tnMode),
передала в параметрах tnMode = 7 и получила прекрасную картинку.
2. Ну и второе. Хотелось бы узнать из каких соображений автор сделал следующее преобразование:
lnQuality = ROUND(0.9 * tnQuality,0)
в функции CopyToFile?
Почему, когда я передаю в параметр lnQuality = 100, то на выходе получаю картинку сохраненную с
lnQuality = 90?
Конечно я понимаю, что вылаженные здесь решения - это просто площадка для полета фантаций, т.е. "Я
вот Вам показал, как можно, а вы уже сами делайте как вам хочется" :-) Так что прошу мое сообщение
не воспринимать как претензии к разработчику. Просто поделилась тем, на что я наткнулась и что мне
не очень понравилось. Может еще кому пригодится, чтобы не тратить время на раскопки чужого кода. :)
Ну а Вячеславу Клепинину еще раз большой respect!
Удачи
Honey
17.01.07 18:28:53
Добрый день.
Скачала Ваш класс.
Очень полезная вещь. Большое спасибо!
Есть два вопроса:
1. Я долго и упорно передавала в функцию CopyToFile разные значения tnMode, но не видела никакой
разницы в сохраненом изображении. В связи с этим изображения получались не того качества, которого
бы хотелось.
Потом нашла в функции GoResizeImage строку:
GdipSetInterpolationMode(graphics, 0),
где на месте нуля должна (на мой взгляд) стоять переменная tnMode.
Заменила на
GdipSetInterpolationMode(graphics, tnMode),
передала в параметрах tnMode = 7 и получила прекрасную картинку.
2. Ну и второе. Хотелось бы узнать из каких соображений автор сделал следующее преобразование:
lnQuality = ROUND(0.9 * tnQuality,0)
в функции CopyToFile?
Почему, когда я передаю в параметр lnQuality = 100, то на выходе получаю картинку сохраненную с
lnQuality = 90?
Конечно я понимаю, что вылаженные здесь решения - это просто площадка для полета фантаций, т.е. "Я
вот Вам показал, как можно, а вы уже сами делайте как вам хочется" :-) Так что прошу мое сообщение
не воспринимать как претензии к разработчику. Просто поделилась тем, на что я наткнулась и что мне
не очень понравилось. Может еще кому пригодится, чтобы не тратить время на раскопки чужого кода. :)
Ну а Вячеславу Клепинину еще раз большой respect!
Удачи
Honey
17.01.07 19:35:32
Добрый день.
Скачала Ваш класс.
Очень полезная вещь. Большое спасибо!
Есть два вопроса:
1. Я долго и упорно передавала в функцию CopyToFile разные значения tnMode, но не видела никакой
разницы в сохраненом изображении. В связи с этим изображения получались не того качества, которого
бы хотелось.
Потом нашла в функции GoResizeImage строку:
GdipSetInterpolationMode(graphics, 0),
где на месте нуля должна (на мой взгляд) стоять переменная tnMode.
Заменила на
GdipSetInterpolationMode(graphics, tnMode),
передала в параметрах tnMode = 7 и получила прекрасную картинку.
2. Ну и второе. Хотелось бы узнать из каких соображений автор сделал следующее преобразование:
lnQuality = ROUND(0.9 * tnQuality,0)
в функции CopyToFile?
Почему, когда я передаю в параметр lnQuality = 100, то на выходе получаю картинку сохраненную с
lnQuality = 90?
Конечно я понимаю, что вылаженные здесь решения - это просто площадка для полета фантаций, т.е. "Я
вот Вам показал, как можно, а вы уже сами делайте как вам хочется" :-) Так что прошу мое сообщение
не воспринимать как претензии к разработчику. Просто поделилась тем, на что я наткнулась и что мне
не очень понравилось. Может еще кому пригодится, чтобы не тратить время на раскопки чужого кода. :)
Ну а Вячеславу Клепинину еще раз большой respect!
Удачи
Honey
17.01.07 19:37:45
Извиняюсь за лишние копии сообщений. Просто в Эксплорере после нажатия кнопки "Сохранить" ничего
не происходит и кажется что сообщение не добавлено. Добавила еще раз через FireFox... а они
оказывается и через Эксплорер добавились... :(