Да-да, снова JavaFX. Наверняка поклонники .NET, Flash/Flex и прочих, не связанных никаким боком с Java-технологий, скажут, что повествование о JavaFX вышло неоправданно затянутым. Что ж, любая точка зрения имеет право на жизнь. Сегодня мы закончим наш разговор об эффектах в JavaFX и вообще об этой многообещающей платформе.
На самом деле нам осталось рассмотреть не так уж много эффектов из арсенала JavaFX, поскольку их библиотека хоть и очень обширна, но всё-таки не совсем безгранична. Мы уже узнали, как изменять тональность цветов изображения, как создавать эффект освещения объекта удалённым от него источником света, как заставлять объект "светиться" самостоятельно... Думаю, каждый из тех эффектов, которые мы рассмотрели, неоднократно будет применён теми, кто решит дальше всерьёз заниматься разработкой RIA-приложений с использованием этой технологии. Что ж, думаю, самое время перейти к рассказу о тех эффектах, которые не были до сих пор рассмотрены в рамках данной серии статей.
Размытие в движении
Мы уже говорили о том, как можно размыть изображение с помощью эффекта GaussianBlur. Это интересный и полезный эффект, который в той или иной ипостаси используют практически все дизайнеры в мире, однако у него есть один существенный недостаток. Причём недостаток именно визуальный, заключающийся в том, что с помощью этого эффекта нельзя создать эффект размытия из-за быстрого движения объекта. GaussianBlur статичен, такова его природа, и, увы и ах, с этим ничего не поделаешь. Однако никто не говорит, что нельзя создать "движение" объекта в JavaFX-приложениях вообще. Просто для этого нужно воспользоваться эффектом MotionBlur - в отличие от статичного GaussianBlur, он позволяет нам без каких бы то ни было проблем создать эффект движения объекта по экрану путём соответствующего его размытия.
Итак, давайте познакомимся с тем, какие параметры имеются в наличии у данного эффекта. Их, к слову, кот наплакал - всего три. Один из них, как вы уже наверняка догадались, называется input - этот параметр присутствует почти у каждого эффекта из библиотеки JavaFX и нужен для того, чтобы можно было "нанизывать" эффекты друг за другом на один и тот же объект. Следующий по счёту параметр называется angle, и, как нетрудно догадаться по его названию, задаёт угол, под которым будет "двигаться" наш объект - то есть, фактически, этим параметром задаётся, в какую сторону его будет размывать. По умолчанию значение данного параметра равно нулю, изменяться же оно, если верить справке, входящей в состав JavaFX SDK, может в любых пределах. Третий параметр называется radius, и с его помощью определяется, как далеко будет размываться наш объект. Изменяется этот параметр от 0.0 до 63.0, а по умолчанию его значение равно 10.0.
Собственно говоря, наверное, это всё, что можно сказать по поводу MotionBlur, так что давайте двинемся дальше, к следующему эффекту.
Эффект перспективы
Иногда нужно сделать так, чтобы казалось, будто один конец изображения располагается ближе к пользователю относительно плоскости экрана, чем другой. Сделать это позволяет эффект, называемый перспективой и знакомый, наверное, всем, кто хоть раз в жизни пробовал что-нибудь нарисовать. Ну а поскольку хотя бы в детстве рисовали все, то и эффект этот должен быть знаком каждому. Нет ничего удивительного в том, что и разработчики JavaFX решили реализовать подобный эффект для того, чтобы его можно было использовать в создаваемых на этой платформе RIA-приложениях.
Здесь этот эффект имеет название PerspectiveTransform, а параметров у него аж целых девять. Что ж, начнём по порядку. Сначала, как всегда, идёт input - куда ж мы без него. Затем идут параметры, как раз и задающие трансформацию исходного изображения. Параметр llx задаёт координату по оси X, куда будет перенесён нижний левый угол исходного изображения. Аналогичную координату, только уже по оси Y, задаёт параметр lly. Следующие, lrx и lry, задают точку, куда сместится нижний правый угол исходного изображения. Аналогично, параметры urx и ury задают новое местоположение верхнего правого угла, а параметры ulx и uly - верхнего левого. Как видите, большое количество параметров ещё не означает, что этот эффект будет сложно применять на практике. По умолчанию все эти параметры имеют нулевое значение, то есть для того, чтобы эффект всё-таки работал, их нужно будет менять.
Чтобы вы лучше представляли себе, каким именно образом работает эффект PerspectiveTransform, я приведу небольшой пример из JavaFX SDK. В листинге вы можете увидеть исходный код данного примера, а на иллюстрации к статье - то, что получается в результате работы этого кода.
import javafx.scene.*; import javafx.scene.shape.*; import javafx.scene.text.*; import javafx.scene.paint.*; import javafx.scene.effect.*; Group { effect: PerspectiveTransform { ulx: 10 uly: 10 urx: 310 ury: 40 lrx: 310 lry: 60 llx: 10 lly: 90 } cache: true content: [ Rectangle { x: 10 y: 10 width: 280 height: 80 fill: Color.BLUE }, Text { x: 20 y: 65 content: "Perspective" fill: Color.YELLOW font: Font.font(null, FontWeight.BOLD, 36); }, ] }
Как видите, применять данный эффект на практике тоже не сказать чтобы слишком сложно, хотя, конечно, настройка его параметров для получения нужного изображения и потребует некоторого времени. Впрочем, это можно сказать, наверное, по поводу практически любого эффекта из библиотеки JavaFX, так что PerspectiveTransform не является исключением из общего правила.
Что ж, будем считать, вы в полной мере познакомились с работой этого полезного эффекта, и настало время двигаться дальше - к последнему эффекту из арсенала JavaFX, который мы рассмотрим на страницах "Компьютерных вестей".
Сепия
Помню, когда я только купил цифровой фотоаппарат, мне очень нравилось фотографировать всё и всех не в цвете, а в режиме сепии. Кто не знает - это режим имитации оттенков на старых фотографиях, отличающийся от чёрно-белого режима коричневатым оттенком получаемого изображения. Конечно, сегодня сепией никого не удивишь - функция создания фотографий в такой тональности есть в каждом "цифровике" и в каждом цифровом редакторе. К чему я это всё говорю? А к тому, что эффект перевода любого изображения в тона сепии есть и в стандартной библиотеке эффектов JavaFX.
В JavaFX правильное название этого эффекта - SepiaTone. Параметров у него, как вы сами уже наверняка догадались, совсем немного - всего два. Первый - это, конечно же, input, о котором мы исправно говорим от эффекта к эффекту. Второй по счёту - это level, он задаёт интенсивность тона сепии для итогового изображения. Этот параметр может изменяться от нуля до единицы, и по умолчанию его значение равно именно единице, что соответствует максимальной насыщенности тона.
Конечно, злоупотреблять таким эффектом, как сепия, вряд ли стоит, и вряд ли он будет часто использоваться на практике в большом количестве приложений. Однако если вам нужно будет сделать RIA для какого-нибудь сайта, где предусмотрена работа с пользовательскими фотографиями, то наличие такого эффекта, несомненно, повысит уровень этого сайта в глазах пользователя, а уровень (и стоимость) вашей работы - в глазах заказчика. Так что имеет смысл помнить на всякий случай про этот интересный и полезный эффект.
Подведём итоги
Что ж, позади у нас с вами целых девять статей по JavaFX. Хочу поблагодарить тех, кто все их прочёл - я знаю, это было непросто, потому что каждая статья, посвящённая технологиям, требует от читателя внимания и сосредоточенности; кроме того, на её обстоятельное чтение нужно выкроить время, которого у каждого человека всегда не хватает. Но, с другой стороны, никакое знание в этой жизни не бывает лишним (если только не пытаться его продать врагам родины), а потому изучение такой перспективной технологии, как JavaFX, не может не принести пользы - пусть даже и в отдалённом будущем. Как говорил персонаж фильма "День выборов", "в этой жизни ничего не бывает просто так, даже овцы в тулупах". И JavaFX тоже появилась не просто так и просто так никуда не исчезнет - я верю в грядущий успех и востребованность этой замечательной технологии.
Хочу отметить, что, судя по активности разработчиков, использующих JavaFX, их день ото дня становится всё больше. Думаю, совсем не за горами то время, когда мы увидим русскоязычные книги, посвящённые JavaFX (только их, как и остальную компьютерную литературу, никто не будет покупать, потому что проще скачать в отсканированном виде). Да и вообще, думаю, у JavaFX есть очень неплохие шансы потеснить Silverlight, а может, даже и отвоевать кусок рынка у технологий Adobe, хотя для этого новому владельцу JavaFX, компании Oracle, и придётся приложить немало усилий... Так или иначе, уже сегодня JavaFX - вполне востребованная технология, имеющая свою рыночную нишу, а значит, и специалисты, знакомые с ней, без работы не останутся.
Продолжать самообразование и изучать JavaFX сейчас довольно просто - для этого достаточно, во-первых, установить JavaFX SDK, чтобы практиковаться, а во-вторых, заходить на ресурсы, посвящённые этой технологии. Хоть я уже давал адреса основных ресурсов по JavaFX, тем не менее, повторюсь: это developers. sun.ru/javafx и javafx.com. И куча разных форумов и блогов по JavaFX - англо- и русскоязычных. Ищите, изучайте, используйте.
Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by
Горячие темы