FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9235
Вход
Расширение графических возможностей VFP средствами GDI+

Класс, написанный на VFP, позволяющий использовать возможности GDI+ для работы с графикой.


 
Прислал: Вячеслав Клепинин   Категория: Графика


Расширение графических возможностей VFP средствами GDI+

Вниманию коллег, испытывающих трудности при работе с графикой, предлагается написанный на фоксе класс. Реализует работу с графическими файлами различных форматов, а так же позволяет программно создавать рисунки. Прилагается описание и демонстрационный пример.
 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.723) Вложение [94.64]kb
Дополнения пользователей
Расширение графических возможностей VFP средствами GDI+
[+][?]
Олег Рябинин
10.09.04 11:51:25

В архиве нет заголовочных файлов - типа 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... а они
оказывается и через Эксплорер добавились... :(
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика