gb.image и вывод изображений на форму

   

Добрый день!
Сегодня я хочу по говорить о библиотеке gb.image и выводе изображений на форму.
По моему эта тема ещё не была освещена в нашем блоге.

Реализуем простой пример:
Откроем файл с изображением и выведем его на форму в контейнер «DrawingArea», при этом изменим размер изображения чтобы оно помещалось в DrawingArea полностью.
А после изменим яркость.

Начнём.
Создадим новый проект выбрав опцию «Обработка изображений». Т.е. в проекте должны быть подключены компоненты gb.image и gb.image.effect.
Разместим на форме контрол контейнер DrawingArea с именем DrawingArea1.
Изменим свойство Border на Plain, чтобы можно было видеть границы изображения.
И изменим свойство Cashed на True. Это необходимо иначе будет возникать ошибка!
Ниже разместим контрол «ButtonBox» с именем ButtonBoxOpenFile. Кстате это новый контрол в версии 3. Он объединяет в себе контролы TextBox и Button. Очень удобен для реализации всевозможных выборов, позволяет и осуществлять выбор нажатием и выводить результат выбора в поле ввода.
FMain

Зададим глобальную переменную, объект в котором и будет хранится наше изображение.

Public hImage As Image

По событию Click() ButtonBoxOpenFile разместим код открытия файла изображений.

Public Sub ButtonBoxOpenFile_Click()
Dialog.Path = Application.Path
Dialog.Filter = ["*.jpg; *.jpeg; *.png; *.bmp", "Picture files"]
If Dialog.OpenFile() Then Return
ButtonBoxOpenFile.Text = Dialog.Path

Далее необходимо загрузить файл изображения в объект hImage.

hImage = Image.Load(ButtonBoxOpenFile.Text)

И вот теперь можно выводить или может даже точнее сказать РИСОВАТЬ изображение на DrawingArea1.
А рисовать выбранное изображение будет следующий код.

Draw.Begin(DrawingArea1)
Draw.Image(hImage, 0, 0)
Draw.End

За вывод изображение отвечает классы Draw или Paint (который позволяет работать с кистью). Мы будем использовать Draw.

Draw.Begin(DrawingArea1) — начинаем вывод в поле DrawingArea.

Draw.Image(hImage, 0, 0) — выводим изображение hImage с началом в 0.0 (левом верхнем углу)

Draw.End — заканчиваем вывод изображения

Причём конструкция
Draw.Begin(DrawingArea1)
Draw.End

является обязательной! А между началом и концом могут располагаться различные способы вывода.

Вот весь код проекта:

Public hImage As Image

Public Sub ButtonBoxOpenFile_Click()
Dialog.Path = Application.Path
Dialog.Filter = ["*.jpg; *.jpeg; *.png; *.bmp", "Picture files"]

If Dialog.OpenFile() Then Return
ButtonBoxOpenFile.Text = Dialog.Path

hImage = Image.Load(Dialog.Path)
Draw.Begin(DrawingArea1)
Draw.Image(hImage, 0, 0)
Draw.End

End

Теперь можно запустить и программа будет уже работать. Вот только ваше изображение, если вы выберете фотографию наверняка не выйдет в область вывода DrawingArea1.
Так давайте уменьшим наше изображение, смасштабируем под размеры DrawingArea1.
А сделать это очень просто с помощью того же метода Draw.Image.

Draw.Image(hImage, 0, 0, DrawingArea1.Width, DrawingArea1.Height)

Изображение конечно может стать непропорциональным, но не будем усложнять пример математическими расчетами.

Следующей нашей задачей было добавить яркости. За это отвечает метод Balance компонента gb.image.effect.

hImage.Balance(0.5, 0, 0)

Параметры метода это: яркость контраст и гамма соответственно. Изменяемые от -1 до 1. Значение 0 означает, что характеристика изображения не меняется. Т.е. в примере мы изменяем только яркость в +0,5. Располагать метод нужно до начал вывода изображения (до Draw.Begin).

Вот и все на этом наш простой пример законче.
Хоть он и простой, но учит главному — выводу изображения на форму. А методов по изменению и преобразованию изображений в библиотеке gb.image.effect предостаточно для любых экспериментов.
Можно и создавать градиенты, добавлять тени, просто заполнять область фоном. Поварачивать изображения, делать зеркальные отражения и многое другое, о чем лучше и точнее расскажет страница wiki.

 

До новых встреч.


С Новым Годом! С новым Gambas!

   

Друзья, поздравляю всех с наступающим Новым годом! Успехов вам в работе, профессиональном развитии и конечно пусть будет время и силы на реализацию всех задумок и проектов!

 

А также поздравляю с входом релиза Gambas3!

Benoît Minisini, как и обещал выпустил сегодня релиз Gambas3. Исходники доступны на сайте проекта:

http://gambas.sourceforge.net/en/main.html

 

 

Как всегда бвло исправлено множество ошибок.

А также закрыты две важные «дыры»:

  • Строковый алгоритм хеширования был реализован через random.
  • В IDE нельзя было получить версию программы. Теперь версия будет браться из текстового файла расположенного в родительском каталоге проекта.

И в последний момент были реализованы следующие новшества:

  • Корректное использование математических функций Glibc.
  • Улучшен вывод цифр с плавающей запятой.
  • Обновлены переводы: французский, чешский и Catalan.

 


Новое в Gambas 3. Внешние отличия.

   

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

И первая статья будет просвещена внешнему виду среды разработки, тому что бросается в глаза при первом запуске Gambas 3.

Внешний вид

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

Главное окно gambas 3

Главное окно gambas 2

А организация меню и панелей осталась на прежнем месте и практически с тем же содержанием.

Без изменений остались пункты главного меню и главной панели инструментов, вот только в версии 3 поле поиска активировано и закреплено в главной верхней панели инструментов.

А вот дерево проекта изменилось, и не только внешне, изменилась сама организация расположения элементов в дереве.

Если в версии 2 в каждом разделе дерева проекта находился соответствующий элемент, например, в разделе «Формы» элемент «Form1», в разделе «Классы» — лежали классы, в разделе «Модули» соответственно модули, а все дополнительные файлы в разделе «Данные». И изменить этот порядок было нельзя.

Дерево проекта

То в версии 3 модули, классы и формы находятся в одном разделе «Источники». В разделах «Проект» и «Данные» могут располагаться дополнительные файлы, такие как страницы html, изображения, стили css и произвольный текст. Но данные просто скопированные в папку проекта появятся, как и прежде в разделе «Данные». Дополнительную директорию в новой версии можно создавать во всех разделах кроме раздела «Соединения», который является абсолютно новым разделом в версии Gambas 3.
Что же располагается в нем?  А в нем располагаются соединения «gb.db.Connection», которые можно очень легко и быстро настроить с помощью визуальных средств на подключение со всеми доступными в Gambas источниками данных.

Окно настройки соединения

Эти соединения доступны в коде программы  в виде передопределенной коллекции с именем «Connections» и ключами, как имена соединений настроенных в дереве проекта. И доступ к ним можно получить всего одной строкой кода:
myConn = Connections[«Connection1»]
Но что самое главное теперь непосредственно в Gambas 3  встроен менеджер баз данных, с помощью которого можно непосредственно в  Gambas просмотреть данные источника к которому вы подключились.

Менеджер баз данных

Этот менеджер позволяет создавать структуру базы данных, не зависимо от типа СУБД. Вводить, просматривать и изменять данные в таблицах, а также выполнять SQL запросы и просматривать результат их выполнения.

Конечно средства управления доступные в менеджере уступают специализированным продуктам, таким как PhpMyAdmin, Sqliteman, MySql Workbench, но тем не менее они позволяют оперативно просмотреть данные в таблицах или быстро заполнить их не прибегая к сторонним продуктам или написанию лишнего отладочного кода.

Это новшество большой шаг в развитии среды разработки Gambas и на сколько мне известно не одна другая среда не может похвастаться такими средствами.

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

___

С уважением Беспалов Алексей, FreeArcher.