Альфа каналы в фотошопе. Обтравочные контуры и альфа-каналы: от создания до применения

Альфа-канал это информация о прозрачности определенных участков видео. Другими словами это видео с прозрачным фоном.

Альфа-канал позволяет оставить нужные нам объекты видимыми, а не нужное пространство сделать прозрачным. По сути, действует альфа-канал так же, как действует маска. Поэтому его иногда называют маска-канал.

В отличи от работы с масками, работа с альфой гораздо проще. Если видеоролик содержит альфа-канал, то все что нам нужно сделать, чтобы добиться нужного а – просто включить его.

Как использовать альфа-канал в Sony Vegas

Для примера мы возьмем видеокомпозицию с использованием черно-белой маски «два сердца», которую мы сделали в уроке « » (рис.4). Удалим из этой композиции клип 1 и клип 2, так как когда футаж будет готов, вместо них мы сможем подставить любое видео или фото.

В Sony Vegas есть возможность получить видео содержащее альфа-канал в одном из двух форматов.mov или.avi.

В меню file выбираем команду render as… (рис. 5)

В появившемся окне в поле «имя файла» дадим имя файлу. В поле «тип файла» выбираем Quick time 7 (*.mov). В поле template (шаблон) выбираем Default Template (uncompressed) (шаблон по умолчанию (без сжатия)), и нажимаем кнопку custom…(пользовательский) (рис. 6).

В появившемся окне (рис. 7), в поле Frame size (размер рамки) выбираем шаблон видео, который мы хотим получить на выходе. В поле Frame rate (частота кадров) выбираем нужный вам шаблон частоты кадров. Самое главное в поле Compressed depth (глубина сжатия) выбрать 32 bpp color (32 миллиона цветов), в противном случае альфа-канал не сохранится.

Чтобы футаж с альфой не содержал звуковой дорожки можно перейти на вкладку audio и снять галочку в поле Include audio (включите аудио) (рис. 8). Это немного уменьшит размер вашего файла.

После всех настроек нужно нажать на кнопку ОК, а в следующем окне на кнопку сохранить. Вот и все, теперь полученное видео будет содержать альфа-канал.

Если вы хотите вывести видео с альфой в avi, нужно сделать все также, как в первом примере, только в поле «тип файла» вместо Quick time 7 (*.mov). нужно выбрать Video for Windows (*.avi).

Затем, нажав на кнопку custom… в поле Compressed depth (глубина сжатия) выбрать uncompressed (без сжатия) и поставить галочку в поле Render alpha channel (uncompressed video formats only) (выводить альфа-канал). (рис. 9).

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

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

Они получили свое название от процесса, называемого альфа-сопряжение , когда частично прозрачное изображение (то, в котором присутствуют прозрачные области) совмещается с другим изображением - так режиссеры создают спецэффекты и поддельные фоны.

Это мощная штука, поскольку та же технология позволяет . На ее создание может уйти уйма времени, вам может не хватить выдержки, если речь идет об особенно сложном выделении, что порой отнимает несколько часов. До тех пор, пока вы сохраняете документ как файл PSD, альфа-канал всегда будет на месте к вашим услугам.

Наиболее распространенный способ применения альфа-канала — создание слоя-маски. Все потому, что их можно использовать для создания невероятно детального выделения, которое нельзя получить любым другим способом.

Создание альфа-канала

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

Чтобы создать, выполните одно из следующих действий:

  • Нажав кнопку Создать новый канал (Create a new channel) . Нажатие этой кнопки позволяет создать пустой альфа-канал под именем Альфа 1. Он совершенно черный, потому что он пуст. Чтобы создать выделенную область, выберите и закрасьте ее белым цветом (представьте этот процесс как рисование отверстия в маске, чтобы можно было увидеть, и, следовательно, выделить то, что находится под ней). Если вы щелкнете мышью по этой кнопке, удерживая клавишу Alt, то сможете присвоить имя.
  • Выбрав команду Новый канал (New Channel) . При выборе этой команды откроется диалоговое окно, в котором вы сможете присвоить имя и указать программе, как отображать информацию.

Если вы предпочитаете, чтобы выделение было черным, а все остальное - белым, установите переключатель в диалоговом окне в положение Выделенные области. Если вы захотите отредактировать альфа-канал с помощью режима Быстрая маска, цвет и прозрачность можно изменить здесь же. Когда вы установите все настройки так, как требуется, нажмите кнопку ОК.

  • Создав выделение, а затем выбрав команду меню Выделение => .
  • Создав выделение и нажав кнопку Сохранить выделенную область в новом канале (Save selection as channel). Она выглядит как круг, вписанный в квадрат.

Изменение альфа-каналов

Создав, вы сможете настроить его так же, как и слой-маску. На нем можно рисовать с помощью инструмента Кисть или использовать любой из инструментов выделения для его изменения. Если вы захотите использовать инструмент выделения, выберите команду меню Редактирование => Выполнить заливку и выберите черный или белый цвет из раскрывающегося списка Использовать (Use) в зависимости от того, что вы хотите сделать, добавить к выделенной области или вычесть из нее (выделенные области белые, а все остальное черное).

Если вам потребуется сделать так, чтобы фотошоп отображал информацию наоборот, к примеру, отображалась в черном цвете, а не в белом, дважды щелкните мышью по миниатюре. В появившемся диалогом окне Параметры установите переключатель в положение Выделенные области. Когда вы это сделаете, программа поменяет цвета маски.

Вы также можете редактировать свой альфа-канал с помощью режима Быстрая маска. Для этого щелкните мышью по значку видимости композитного канала. Когда вы это сделаете, программа поместит поверх изображения красное наложение. Если вы редактируете в изображении, содержащем большое количество красного цвета, вы ничего не увидите сквозь маску. В этом случае необходимо изменить цвет наложения.

Кроме того, вы можете применить фильтры к альфа-каналу, как и к слою-маске. Среди наиболее полезных фильтров назову Размытие по Гауссу (Gaussian Blur) для смягчения края (полезно, если вы пытаетесь выделить немного размытую область) и набор Штрихи (Brush Stroke) (для придания маске оригинальных краев).

Удаление

Закончив использовать (или решив начать все сначала с новым), вы можете удалить его, перетащив на кнопку Удалить текущий канал (Delete) (выглядит как маленькая корзина для мусора). Или щелкните мышью по этой кнопке, и нажмите кнопку Да (Yes), когда появится запрос об удалении.

Заметили ошибку в тексте - выделите ее и нажмите Ctrl + Enter . Спасибо!

Растровое изображение образуется из целого количества строк и столбцов. Для любого экземпляра класса, производного от BitmapSource, эти размеры могут быть получены из свойств PixelHeight и PixelWidth .

На концептуальном уровне биты пикселов хранятся в двумерном массиве, размеры которого равны PixelHeight и PixelWidth. Фактически массив имеет всего одно измерение, но основные проблемы возникают с представлением отдельных пикселов. В этом представлении, иногда называемым «цветовым форматом» растрового изображения, может использоваться от одного бита на пиксел (для изображений, состоящих только из черного и белого цветов) до одного байта на пиксел (для изображений, состоящих из оттенков серого или растров с 256-цветовой палитрой), 3 или 4 байтов на пиксел (для полноцветных изображений с прозрачностью или без нее) и даже более для больших цветовых разрешений.

Однако для работы с WriteableBitmap был установлен единый цветовой формат. В любом объекте WriteableBitmap каждый пиксел состоит из четырех байтов. Таким образом, общее количество байтов в массиве пикселов растрового изображения равно:

PixelHeight * PixelWidth * 4

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

Синий, Зеленый, Красный, Альфа

Значения байтов лежат в диапазоне от 0 до 255, как в значениях Color. Предполагается, что цветовые значения WriteableBitmap соответствуют схеме sRGB («стандарт RGB»), а следовательно, совместимы со значениями Windows Runtime Color (кроме значения Colors.Transparent - см. далее).

Пикселы WriteableBitmap хранятся в предумноженном альфа-канале (premultiplied alpha) . Вскоре я расскажу, что это значит.

Порядок «синий-зеленый-красный-альфа» на первый взгляд противоположен тому, который обычно используется для обозначения цветовых байтов (и их порядку в методе Color.FromArgb), но он вполне логичен, если учесть, что пиксел WriteableBitmap в действительности представляет собой 32-разрядное целое без знака, у которого в старшем байте хранится альфа-канал, а в младшем - синяя составляющая. В операционных системах на базе микропроцессоров Intel это целое число хранится в прямом (little-endian) порядке байтов.

Давайте построим растровое изображение. Для этого мы создадим объект WriteableBitmap и заполним его пикселами. Чтобы упростить вычисления, WriteableBitmap будет состоять из 256 строк и 256 столбцов. Левый верхний угол будет черным, правый верхний - синим, левый нижний - красным, и правый нижний - фиолетовый (сочетание красного и синего). Окраска представляет собой разновидность градиента, но она отличается от градиентов, доступных в Windows Runtime.

Файл XAML определяет элемент Image, которому присваивается экземпляр класса производного от ImageSource:

Создать экземпляр WriteableBitmap в XAML невозможно, потому что у этого класса нет конструктора без параметров. Файл фонового кода создает и строит WriteableBitmap в обработчике события Loaded. Ниже приведен полный файл вместе с необходимыми директивами using. Сам класс WriteableBitmap определяется в пространстве имен Windows.UI.Xaml.Media.Imaging:

Using System.IO; using Windows.UI.Xaml; using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Controls; using System.Runtime.InteropServices.WindowsRuntime; namespace WinRTTestApp { public sealed partial class MainPage: Page { public MainPage() { this.InitializeComponent(); Loaded += MainPage_Loaded; } private async void MainPage_Loaded(object sender, RoutedEventArgs e) { WriteableBitmap bitmap = new WriteableBitmap(256, 256); byte pixels = new byte; for (int y = 0; y < bitmap.PixelHeight; y++) for (int x = 0; x < bitmap.PixelWidth; x++) { int index = 4 * (y * bitmap.PixelWidth + x); pixels = (byte)x; // Blue pixels = 0; // Green pixels = (byte)y; // Red pixels = 255; // Alpha } using (Stream pixelStream = bitmap.PixelBuffer.AsStream()) { await pixelStream.WriteAsync(pixels, 0, pixels.Length); } bitmap.Invalidate(); image.Source = bitmap; } } }

Конструктору WriteableBitmap должна передаваться ширина и высота изображения в пикселах. На основании этих размеров программа выделяет память для массива байтов:

Byte pixels = new byte;

Размер массива для WriteableBitmap всегда вычисляется по этой формуле.

Циклы по строкам и столбцам перебирают все пикселы изображения. Индекс для обращения к конкретному пикселу в массиве вычисляется следующим образом:

Int index = 4 * (y * bitmap.PixelWidth + x);

В этом конкретном примере два цикла обращаются к пикселам в порядке их хранения в массиве, так что индекс не приходится пересчитывать заново для каждого пиксела. Его можно инициализировать нулем, а потом увеличивать следующим образом:

Int index = 0; for (int y = 0; y < bitmap.PixelHeight; y++) for (int x = 0; x < bitmap.PixelWidth; x++) { int index = 4 * (y * bitmap.PixelWidth + x); pixels = (byte)x; // Blue pixels = 0; // Green pixels = (byte)y; // Red pixels = 255; // Alpha }

Такое решение почти наверняка будет работать быстрее моего, но в целом оно обладает меньшей гибкостью.

Также можно определить цикл по index с вычислением x и y по текущему значению переменной. Важна не конкретная реализация, а то, чтобы в результате перебора были обработаны все пикселы (не всегда, конечно, но в большинстве случаев).

После того, как массив byte будет заполнен, пикселы необходимо перенести в объект WriteableBitmap. Этот процесс на первый взгляд выглядит довольно странно. Свойство PixelBuffer, определяемое WriteableBitmap, относится к типу IBuffer , который определяет всего два свойства: Capacity и Length. Как было указано ранее, объект IBuffer обычно представляет область памяти, находящуюся под управлением операционной системы с механизмом подсчета ссылок; когда память становится ненужной, объект автоматически уничтожается. Байты необходимо перенести в такой буфер.

К счастью, существует метод расширения AsStream , позволяющий интерпретировать объект IBuffer как объект.NET Stream:

Stream pixelStream = bitmap.PixelBuffer.AsStream()

Чтобы использовать этот метод расширения, необходимо включить в программу директиву using для пространства имен System.Runtime.InteropServices.WindowsRuntime. Без этой директивы InlelliSense не будет знать о существовании этого метода.

Далее обычный метод Write, определяемый классом Stream, используется для записи байтового массива в объект Stream; также можно использовать метод WriteAsync, как сделано у меня. Так как изображение невелико, а вызов просто передает массив байтов через API, метод Write отработает достаточно быстро для выполнения операции в потоке пользовательского интерфейса. Далее объект Stream уничтожается «вручную» или автоматически, или же логика Stream размешается в директиве using, как это сделано у меня:

Using (Stream pixelStream = bitmap.PixelBuffer.AsStream()) { await pixelStream.WriteAsync(pixels, 0, pixels.Length); }

Привыкните к тому, что при каждом изменении пикселов WriteableBitmap следует вызывать для изображения Invalidate:

Bitmap.Invalidate();

Этот вызов требует перерисовки растрового изображения. В этом конкретном контексте его присутствие не обязательно, но в других случаях он важен. Остается вывести построенное изображение. Программа просто задает его свойству Source элемента Image в файле XAML:

Image.Source = bitmap;

Результат:

Если сохранить объект Stream и массив пикселов в поле для дальнейших манипуляций с растровым изображением (например, его изменения со временем), перед вызовом WriteAsync следует вставить вызов Seek для возвращения текущей позиции к началу:

PixelStream.Seek(0, SeekOrigin.Begin);

Учтите, что в объект растрового изображения можно записать только часть массива байтов. Предположим, вы изменили пикселы в диапазоне от (x1, y1) до (x2, y2) (не включая последнюю точку). Сначала определите индексы байтов, соответствующих этим двум координатам:

Int index1 = 4 * (y1 * bitmap.PixelWidth + x1); int index2 = 4 * (y2 * bitmap.PixelWidth + x2);

Затем укажите, что вы собираетесь обновить пикселы от index1 до index2:

PixelStream.Seek(index, SeekOrigin.Begin); pixelStream.Write(pixels, index1, index2 - index1); bitmap.Invalidate();

Попробуем реализовать другую разновидность пользовательского градиента. В следующей программе CircularGradient градиент вычисляется на основании угла конкретного пиксела относительно центра изображения (вычисления проще, чем можно ожидать).

Файл XAML определяет Ellipse с толстым контуром и объектом ImageBrush для свойства Stroke. Анимация поворачивает объект Ellipse относительно центра:

Обработчик Loaded в файле фонового кода почти не отличается от предыдущей программы. Два цикла перебирают строки и столбцы изображения, каждый пиксел расположен в позиции (x,y) относительно левого верхнего угла. Пиксел в центре имеет координаты (bitmap.PixelWidth/2, bitmap.PixelHeight/2). В результате вычитания координат центра из координат конкретного пиксела и деления на ширину и высоту изображения координаты пиксела преобразуются в значения из диапазона от -1/2 до 1/2, которые затем можно передать методу Math.Atan2 дли получения нужного угла:

Using System.IO; using Windows.UI.Xaml; using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Controls; using System.Runtime.InteropServices.WindowsRuntime; using System; namespace WinRTTestApp { public sealed partial class MainPage: Page { public MainPage() { this.InitializeComponent(); Loaded += MainPage_Loaded; } private async void MainPage_Loaded(object sender, RoutedEventArgs e) { WriteableBitmap bitmap = new WriteableBitmap(256, 256); byte pixels = new byte; int index = 0; int centerX = bitmap.PixelWidth / 2; int centerY = bitmap.PixelHeight / 2; for (int y = 0; y < bitmap.PixelHeight; y++) for (int x = 0; x < bitmap.PixelWidth; x++) { double angle = Math.Atan2(((double)y - centerY) / bitmap.PixelHeight, ((double)x - centerX) / bitmap.PixelWidth); double fraction = angle / (2 * Math.PI); pixels = (byte)(fraction * 255); // Blue pixels = 0; // Green pixels = (byte)(255 * (1 - fraction)); // Red pixels = 255; // Alpha } using (Stream pixelStream = bitmap.PixelBuffer.AsStream()) { await pixelStream.WriteAsync(pixels, 0, pixels.Length); } bitmap.Invalidate(); imageBrush.ImageSource = bitmap; } } }

Этот угол преобразуется в дробную величину в диапазоне от 0 до 1 для вычисления градиента. Вот как выглядит полное растровое изображение, используемое объектом ImageBrush, заданным свойству Fill объекта Ellipse:

Как было показано ранее, кисти в Windows Runtime обычно растягиваются по элементу, к которому они применяются. С кистью ImageBrush происходит то же самое, так что в каком-то смысле размер базового изображения не так уж важен... До определенной степени, конечно, - слишком маленькое изображение не обладает достаточной детализацией, а слишком большое превращается в напрасную трату пикселов.

Когда растровое изображение отображается на поверхности (скажем, на экране монитора), его пикселы не всегда просто передаются на поверхность. Если растровое изображение поддерживает прозрачность, каждый пиксел должны объединяться с цветом существующей поверхности в соответствующей точке на основании альфа-канала этого пиксела. Если альфа-канал равен 255 (полная непрозрачность), пиксел изображения просто копируется на поверхность. Если альфа-канал равен 0 (прозрачность), пиксел вообще не копируется. Если альфа-канал равен 128, результатом является среднее значение цвета пиксела изображения и цвета поверхности перед выводом.

Следующие формулы демонстрируют соответствующие вычисления для одного пиксела. В реальности значения A, R, G и B лежат в диапазоне от 0 до 255, но следующие упрощенные формулы предполагают, что они были нормализованы до диапазона от 0 до 1. Подстрочные пояснения обозначают «результат» отображения частично прозрачного пиксела «изображения» на существующей «поверхности»:

Обратите внимание на второе умножение в каждой строке. В нем задействован только сам пиксел изображения, но не поверхность. Отсюда следует, что весь процесс отображения растрового изображения на поверхности можно ускорить предварительным умножением значений R, G и В пиксела на величину А:

Допустим, растровое изображение без предумножения альфа-канала содержит пиксел со значением ARGB (192,40,60,255). Альфа-канал 192 обозначает 75-процентную непрозрачность (192, деленное на 255). Эквивалентный пиксел с предумножением альфа-канала имеет вид (192, 30, 45, 192): красная, зеленая и синяя составляющие были умножены на 75 %.

При отображении WriteableBitmap операционная система предполагает, что пиксел имеет формат с предумножением альфа-канала. У произвольного пиксела ни одно из значений R, G и В не может превышать значение А. Если это условие не выполняется, ничего ужасного не случится, но вы не получите желаемые цвета и уровни прозрачности.

Рассмотрим несколько примеров. В статье "Масштабирование элементов в WinRT" было показано, как перевернуть изображение и «растворить» его, чтобы оно выглядело как отражение. Но поскольку Windows Runtime не поддерживает маски прозрачности, для реализации эффекта прозрачности мне пришлось накрыть изображение полупрозрачным прямоугольником.

В проекте ReflectedAlphaImage было использовано другое решение. Файл XAML содержит два элемента Image, занимающих одну ячейку панели Grid из двух строк. Для второго элемента Image задаются свойства RenderTransformOrigin и ScaleTransform, обеспечивающие его «отражение» относительно нижней стороны, но изображение при этом не указывается:

.jpg" HorizontalAlignment="Center" />

Растровое изображение, на которое ссылается первый элемент Image, должно загружаться независимо в файле фонового кода. (Возможно, у вас возник вопрос - нельзя ли получить объект WriteableBitmap на основе объекта, заданного свойству Source первого объекта Image? Но этот объект относится к типу BitmapSource, а создать WriteableBitmap по BitmapSource невозможно.) Если изменять загруженное изображение не требуется, конструктор может выглядеть примерно так:

Loaded += async (sender, e) =>.jpg"); RandomAccessStreamReference refStream = RandomAccessStreamReference.CreateFromUri(uri); IRandomAccessStreamWithContentType fileStream = await refStream.OpenReadAsync(); WriteableBitmap bitmap = new WriteableBitmap(1, 1); bitmap.SetSource(fileStream); reflectedImage.Source = bitmap; };

Этот код следует поместить в обработчик Loaded, потому что в нем используется асинхронное выполнение. Обратите внимание на возможность создания WriteableBitmap с фактически «неизвестным» размером при поступлении данных из метода SetSource. Читая поток JPEG, объект WriteableBitmap может определить фактические размеры в пикселах.

Однако когда объект FileStream передается методу SetSource объекта WriteableBitmap, а также при его задании свойству Source элемента Image, растровое изображение еще не загружено. Загрузка осуществляется асинхронно в коде WriteableBitmap. Это означает, что приступать к изменению пикселов пока нельзя, потому что данные еще не получены! Конечно, было бы удобно, если бы класс WriteableBitmap определял событие, инициируемое при завершении загрузки растрового изображения в SetSource, но такого события нет. Событие ImageOpened элемента Image также не может предоставить эту информацию WriteableBitmap.

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

Using System.IO; using Windows.UI.Xaml; using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Controls; using System.Runtime.InteropServices.WindowsRuntime; using System; using Windows.Storage.Streams; namespace WinRTTestApp { public sealed partial class MainPage: Page { public MainPage() { this.InitializeComponent(); Loaded += MainPage_Loaded; } private async void MainPage_Loaded(object sender, RoutedEventArgs e).jpg"); RandomAccessStreamReference refStream = RandomAccessStreamReference.CreateFromUri(uri); // Создание буфера для чтения потока Windows.Storage.Streams.Buffer buffer = null; // Чтение всего файла using (IRandomAccessStreamWithContentType fileStream = await refStream.OpenReadAsync()) { buffer = new Windows.Storage.Streams.Buffer((uint)fileStream.Size); await fileStream.ReadAsync(buffer, (uint)fileStream.Size, InputStreamOptions.None); } // Создание объекта WriteableBitmap с неизвестным размером WriteableBitmap bitmap = new WriteableBitmap(1, 1); // Создание потока памяти для передачи данных using (InMemoryRandomAccessStream memoryStream = new InMemoryRandomAccessStream()) { await memoryStream.WriteAsync(buffer); memoryStream.Seek(0); // Поток в памяти используется как источник данных Bitmap bitmap.SetSource(memoryStream); } // Получение пикселов из растрового изображения byte pixels = new byte; int index = 0; using (Stream pixelStream = bitmap.PixelBuffer.AsStream()) { await pixelStream.ReadAsync(pixels, 0, pixels.Length); // Применение прозрачности к пикселам for (int y = 0; y < bitmap.PixelHeight; y++) { double opacity = (double)y / bitmap.PixelHeight; for (int x = 0; x < bitmap.PixelWidth; x++) for (int i = 0; i < 4; i++) { pixels = (byte)(opacity * pixels); index++; } } // Пикселы помещаются обратно в изображение pixelStream.Seek(0, SeekOrigin.Begin); await pixelStream.WriteAsync(pixels, 0, pixels.Length); } bitmap.Invalidate(); reflectedImage.Source = bitmap; } } }

Имя класса Buffer должно задаваться полностью уточненным, с включением пространства имен Windows.Storage.Streams, потому что в пространстве имен System тоже присутствует класс с именем Buffer.

Одна из наших целей - передача объекта типа IRandomAccessStream методу SetSource объекта WriteableBitmap. Однако мы хотим немедленно приступить к работе с пикселами полученного изображения, а это невозможно, пока файл не будет прочитан полностью.

Этим объясняется создание объекта Buffer для чтения объекта fileStream и последующее использование того же объекта Buffer для чтения содержимого в InMemoryRandomAccessStream . Как подсказывает название, класс InMemoryRandomAccessStream реализует интерфейс IRandomAccessStream, чтобы его экземпляры можно было передавать методу SetSource класса WriteableBitmap (обратите внимание на необходимость предварительного обнуления позиции в потоке).

Важно понимать, что здесь мы работаем с двумя разными блоками данных. Объект fileStream соответствует файлу PNG, который в данном случае представляет собой блок из 82 824 байт сжатых графических данных. Объект InMemoryRandomAccessStream содержит тот же блок данных. После того как поток будет передан методу SetSource класса WriteableBitmap, он декодируется на строки и столбцы пикселов. Размер массива pixels составляет 512 000 байт, и объект pixelStream работает с этими распакованными пикселами. Объект pixelStream сначала используется для чтения пикселов в массив pixels, а затем для их записи обратно в изображение.

Если вы хотите посмотреть, что произойдет при изменении одного лишь альфа байта, замените следующий код внутреннего цикла:

If (i == 3) { pixels = (byte)(opacity * pixels); index++; }

Между двумя вызовами выполняется непосредственное применение градиентной прозрачности. Если бы среда Windows Runtime не предполагала, что пикселы WriteableBitmap хранятся в формате с предумножением альфа-канала, то достаточно было бы модифицировать только альфа-байт. С предумножением альфа-канала также необходимо модифицировать и цветовые данные. Результат выглядит так:

Нужный уровень прозрачности достигается, но только при использовании белого фона. Если фон будет черным, прозрачности не будет вообще! Взгляните на формулы, и вам все станет ясно.

Предположим, вы хотите изменить проект CircularGradient так, чтобы в нем использовался градиент от однородного цвета к полной прозрачности. Измененный код для задания четырех байтов выглядит так:

Pixels = (byte)(fraction * 255); // Blue pixels = 0; // Green pixels = 0; // Red pixels = (byte)(fraction * 255); // Alpha

Синему и альфа-компоненту присваиваются одинаковые значения. В формате без предумножения альфа-канала синяя составляющая всегда будет равна 255. Результат:

Альфа-канал также представляет собой изображение в градациях серого. Подобно цветовому каналу, он поддерживает 256, 65536 или 4 294 967 296 (согласно цветовому разрешению) оттенков серого - градаций "серой шкалы". Но в отличие от цветового, альфа-канал не содержит в себе информации, которая бы касалась того, как изображение выглядит. Вместо яркости цвета градации серого здесь представляют непрозрачность, степень полупрозрачности или прозрачность маски.

В Photoshop имеется много способов изолировать(маскировать) область на изображении так, чтобы выполнить над ней какие-либо операции. Альфа-канал представляет собой еще один инструмент, позволяющий выделить область и сохранить информацию об этом, чтобы использовать ее в дальнейшем.

Имейте в виду, что альфа-каналы, никак не влияя сами по себе на изображение, расходуют память и увеличивают размер файла документа. В последней версии Photoshop можно сохранить до 56 каналов, включая цветовые и альфа-каналы (в версии 7.0 - до 24 каналов) (исключение здесь составляют побитовые растровые изображения bitmap, для которых альфа-каналы использовать нельзя), но необходимо помнить, что каждый сохраненный альфа-канал заметно увеличивает размер файла, а потому альфа-каналы лучше всего удалять сразу, как в них отпадет нужда.

1. Если открыть изображение RGB и посмотреть впалитру Channel вы увидитеRed, Green и Blue каналы плюс"RGB" канал ."RGB" канал является лишь составным из остальных каналов.

2. Если открыть CMYK изображение и заглянуть впалитру Channels вы увидитеCyan, Magenta, Yellow и Black каналы плюс"CMYK" канал. В"CMYK" канал также, как и«RGB » просто соединение из остальных каналов.

Каждый канал цветного изображения (RGB илиCMYK )имеет глубину 8 - битного цвета. ВRGB изображение состоит из трех 8 - битных каналов, которые в совокупности образуют единое24 битное изображение (3 х 8 = 24). АCMYK изображение состоит из четырех 8 - битных каналов, которые в совокупности образуют32 - битное изображение (4 х 8 = 32).

Не стоит путать. Каждый пиксель в RGB изображении (а не одного канала)имеет глубину цвета 24 бита , а каждый пиксель вCMYK изображении имеет глубина цвета в32 бита .

3. По умолчанию, Photoshop отображает каналы в оттенках серого. Но можно показывать каналы и в цвете. Выберите Edit < Preferences < Display & Cursors, поставьте галочку «Color Channels in Color» .

Сохранение маски выделения в Альфа канале

Когда вы в Photoshop создаете выделение некоторой области изображение, то есть смысл сохранить маску выделения (маска - это 8 бит в градациях серого изображения) в вашем документе. Photoshop может сохранять маску в виде канала.

4. В этом примере мы будем использовать инструмент Magic Wand для выделения объекта (выделите белый фон изображения, кликнув по нему этим инструментом).

5. Теперь выберите > Save ion и нажмите"ОК" в диалоговом чтобы сохранить выделение. Photoshop сохранит его в виде нового канала по умолчанию.

6. Теперь в палитре Channels новый канал. Photoshop по умолчанию присваивает новому каналу название "Alpha 1".

7. Выберете канал "Alpha 1" в палитре Channels.

8. Теперь в окне документа, показан сам канал.

Оттенки

Первый и самый главный параметр, который вы должны корректировать при обработке фотографий в Photoshop это тона, другими словами распределение темного и светлого на изображении. Большинство людей используют для этого функцию Brightness/Contrast (Яркость/контраст). Brightness (Яркость) увеличивает общее количество белого на фотографии, в то время какcontrast (контраст) усиливает различие между белым и черным. Хотя и может показаться, что они эффективны, использование таких простейших функций может принести больше вреда, нежели пользы. Чтобы стать более продвинутым пользователем Photoshop, вам придется забыть о функции Brightness/Contrast и начать использовать вместо нееLevels .

Что такое Уровни?

Откройте ваше изображение и переедите к элементу меню: image>adjustments>levels (или нажмите Ctrl L). Это вызовет граф, который называется гистограмма. Он располагает тона изображения от черного к белому (слева направо) вдоль оси Х, а на оси У отображает количество информации изображения в пределах данного диапазона серого. Чем выше пик, тем больше информации вашего изображения попадает в этот диапазон серого. Если ваша гистограмма больше смещена влево, это означает, что ваше изображение имеет много теней и черного цвета и возможно невыдержанно. Если ваша гистограмма больше смещена вправо, изображение имеет много осветленных участков и белого и возможно передержано. Сбалансированные и симметричные гистограммы часто свидетельствуют об изображениях, которые приятны глазу, считается, что такие изображения выдержаны правильно. Часто говорят, что такие изображения имеют сбалансированные тона. Нет ничего страшного в гистограмме, которая смещена влево или вправо, однако создание живого изображения всегда требует сбалансированных тонов.

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

Эта гистограмма демонстрирует хорошо выдержанное изображение с большим количеством информации по всем оттенкам. Ни один из концов не выходит за границы, поэтому изображение выдержано правильно

Гистограмма сверху показывает изображение с множеством осветленных мест. С правого края гистограмма выходит за границы чарта, что говорит о том, что часть этого изображения передержана и нет доступных данных по этому оттенку.

Экспозиция

Что означает, когда изображение невыдержанно или передержано? Когда изображение является настолько темным, что многие зоны содержат чистый черный цвет без каких-либо деталей, это часть изображения считается невыдержанной. Что означает, что через линзы проходило недостаточно света для обеспечения достаточного количества деталей для пленочного или цифрового датчика. Если через линзы проходило слишком много света, части изображения могут получиться настолько яркими, что они теряют все детали и становятся чисто белыми. Это называется передерживание.

Гистограмма показывает яркость от чисто черного до чисто белого. Все, что находится в промежутке является оттенками серого. Если гистограмма показывает, что данные картинки уходят вверх к чисто черному или чисто белому и график выглядит так, как будто его головная и хвостовая части отрезаны, изображение может иметь проблемы с экспозицией.

Использование Уровней

Нажмите Ctrl. L, чтобы вызвать окно Уровней Окно Уровней должно выглядеть примерно как на рисунке снизу. Вы можете смело проигнорировать все, что я выделил в синем боксе.

Обратите внимание на следующие параметры и как они работают:

Черный бегунок Black Point. Передвигая этот бегунок, вы сообщаете Photoshop, что вы хотите, чтобы весь спектр оттенков внутри изображения начинался как черный здесь. Любая информация слева от бегунка будет утеряна.

Белый бегунок White Point. Передвигая этот бегунок, вы сообщаете Photoshop, что вы хотите, чтобы весь спектр оттенков внутри изображения кончался как белый здесь. Передвижение бегунков Black Point и White Point походит на настройку контраста изображения, разве что у вас тут гораздо больше контроля.

Серый бегунок Gray Midpoint. Передвигая этот бегунок, вы сообщаете Photoshop, что вы хотите, чтобы весь спектр оттенков между черным и белым центрировался вокруг этой точки. Передвижение этого бегунка схоже с настройкой яркости изображения.

 Снизу, где написано "Output Levels" (Выходные Уровни) вы можете вручную выровнять теневые и осветленные области вашего изображения. Путем передвижения черного и белого бегунков вдоль шкалыClipping Scale вы можете заставить изображение исключить либо осветленные участки, либо теневые. Передвинув черный бегунок вправо, вы вручную удаляете некоторые затемненные детали в изображении. Передвинув белый бегунок влево, вы вручную удаляете некоторые осветленные детали в изображении. В основном эта функция позволяет вам удалять ненужные детали по концам гистограммы.

О чем мне говорит эта гистограмма?

Первая вещь, которую вам следует сделать, работая с уровнями, это изучить гистограмму. Выясните, какие она имеет позиции, затем переместите бегунки в оптимальные позиции. В данном примере левый край гистограммы имеет недостаток данных. Это означает, что на данной фотографии нет глубоких теней. Просто взглянув на нее, вы можете сказать: Самые темные места достигают лишь темно серого цвета. С правого края тонкая линия на графика указывает на присутствие некоторых осветленных участков, хотя их не много. К счастью, практически нет информации на гистограмме, которая бы скрывалась за пределами графика. Если слишком много информации скрывается за границами графика, картинку будет очень сложно выровнять.

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

Преобразование оттенков.

В общем, что вы должны сделать, так это сказать Photoshop, что вы хотите, чтобы самый темный оттенок в изображении стал полностью черным, а самый светлый оттенок - полностью белым. Это перераспределит все оттенки в изображении, придавая ему больший контраст, детализацию, а также динамический диапазон.

Черный бегунок Black Point. Этот бегунок вы помещаете ровно в то место, где начинаются данные в левой части гистограммы. Вы заметите в окне предварительного просмотра, как затемняются тени.

Белый бегунок White Point. Этот бегунок вы помещаете ровно в то место, где начинаются данные в левой части гистограммы. В окне предварительного просмотра вы заметите, как осветленные участки становятся еще светлее. Так как у нас мало информации, находящейся на конце осветленных участков, установка бегунка после начала данных убрала некоторые осветленные участки с изображения. Иногда удаление некоторых осветленных участков или теней это жертва, на которую необходимо идти, чтобы добиться более приятного тонального диапазона. В этом случае это не страшно, так как данных осветленных участков очень мало (это не резкий скачок на графике)

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

Теперь вы можете либо нажать ОК и сохранить изменения, отменить изменения или нажать Reset с зажатым Alt. чтобы сбросить все позиции бегунков. Теперь вы знаете, как использовать слои вместо функции Photoshop brightness/contrast (яркость/контраст).

1. Слои управляются в палитре слоев (Layers) . В ней отображается небольшой эскиз (превью каждого слоя, чтобы было проще его найти). Отображающийся в Photoshop документ - это соединение всех слоев из стопки сверху вниз (внизу справа).

2. Вы можете включать и выключать отображение любого слоя. Значок в виде глаза слева от каждого слоя контролирует его видимость. Слой делается видимым или скрытым при нажатии этого значка (внизу слева). В результате тот же документ, что показан ранее, за исключением, одного слоя.

3. При нажатии клавиши Option (для Mac) / Alt (для PC) с одновременным щелчком по иконке глаза слоя скроются/отобразятся все остальные слои (ниже слева). В примере, приведенном ниже, слой под названием «Paint» становится видимым, а остальные скрываются (ниже справа). Заметим, что слой с именем«Photo» все еще выделен. Подсвеченный слой в палитре Layers означает, что он является активным (или выбранным). Это означает, что все изменения в окне документа будут применяться к нему.

4. Щелкните на слое, чтобы активировать его (круг ниже слева). Теперь все изменения в окне документа будут применяться к слою «Paint» .

Заметим, что нет никаких изменений во внешнем виде окна рабочей области документа (внизу справа). Посмотрите на палитру слоев, чтобы узнать, какой слой является активным, а не в окне документа.

5. Вы можете быстро выделить все непрозрачные области слоя зажав (для Mac) / Ctrl (для PC) и кликнув по нужному слоюв палитре Layers. Когда вы удерживайте клавишу/Ctrl , указатель мыши превращается в руку с квадратом выделения (ниже слева). В результате изображение слоя выделится. Вы увидите «муравьиную дорожку» вокруг изображения слоя (внизу справа).

6. Чтобы удалить слой, щелкните по нему и перетащите в корзину (кнопка в палитре слоев (внизу слева)). Результат показан ниже справа.

7. Чтобы создать новый слой, нажмите кнопку New Layer в палитре Layers (внизу слева). Новый слой появится чуть выше активного слоя (внизу справа).

8. Чтобы дублировать слой, перетащите его на кнопку New Layer . В приведенном ниже примере, новый слой будет создан с именем«photo copy» .

9. Для изменения порядка слоя, нажмите на него и переместите вверх или вниз в палитре Layers.

10. Вы можете изменять прозрачность слоя, перетаскивая ползунок Opacity (внизу слева). Кроме того, можно просто ввести значение Opacity.

Сегодня пойдет речь о форматах изображений их особенностях и отличительных чертах. Многие из нас знают, что изображения имеют разные форматы, но не все понимают, почему их такое множество и какие у них отличительные черты.

Любое изображение, хранящееся на компьютере, имеет свой графический формат. Каждый из графических форматов имеет свои свойства и своё предназначение. На сегодняшний день существует огромное количество графических форматов. Большую часть графических форматов, мы будем рассматривать на основе одного из самых популярных графических редакторов Adobe Photoshop. Почему именно фотошоп, все просто, этот графический редактор обладает наибольшим количеством форматов.

Но дополнительно, постараемся разобрать и другие широко известные форматы изображения.

Итак, приступим:

PSD – это собственный формат программы Adobe Photoshop, он позволяет сохранять всю проделанную работу над изображением. А именно прозрачность, режимы смешивания слоев, тени, слои, маски слоя и все остальные мелочи работы проделанной с изображением. Этот формат обычно используется, если работа над изображением до конца не завершена. Так же его часто используют для разработки макета сайта, так как производить верстку с данного файла удобно видя все слои и элементы. А во всех остальных случаях его использование нет смысла, так как он имеет значительно большой размер файла по отношению к другим форматам.

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

BMP – это точечный рисунок. Изображение в этом формате состоит из массы точек, каждая из которых содержит свой цвет. Этот формат имеет очень большой размер и хорошо подвергается сжатию архиваторами. Потери качества в BMP не значительное, однако, он уступает TIFF.

JPEG – это самый широко используемый формат. Он получил широкое использование в цифровой технике (фотоаппаратах). Причина столь широкого использования это довольно не плохое качество и маленький размер файла. Но маленький размер говорит о том, что значительно теряется качество изображения. Все дело в алгоритме сжатия изображений, он состоит в том что, сжимаясь, изображение значительно теряет точность. Этот формат по этим причинам не желательно использовать в полиграфии. Но плюсом является то, что их удобно посылать по email (электронной почте), выкладывать в Интернете и хранить на дисках.

GIF – в основном используется для изготовления графики для Интернета. Он не годится для сохранения фотографий, так как имеет ограничение по цветопередаче, по этим же причинам он не годится для полиграфии. Изображение данного графического формата состоит из точек, которые могут включать в себя от 2 до 256 цветов. Ограниченность цветопередачи и поддержка прозрачности делают его незаменимым для хранения изображений с минимум цветов, например логотипов. Еще одна особенность формата это возможность изготовления анимированных изображений. Широко применяют для создания gif (анимированных) баннеров.

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

Этот формат уникален он поддерживает все необходимые для печати, может записывать данные в RGB, обтравочные контуры, а также использование шрифтов и другое. Первоначально EPS разрабатывался как векторный формат, ну а позднее уже появилась его разновидность растра — Photoshop EPS.

PNG – это графический формат, который пришел совсем недавно на смену Gif формату, и уже успел, стань очень популярным из за того, что умеет держать прозрачность и полупрозрачность что было не возможно в его предшественнике gif. Это значит что png держит полупрозрачность в диапазоне от 1 до 99% при помощи альфа-канала с 256 градациями серого. Прозрачность работает следующим образом, в файл записывается информация о гамма — коррекции. Гамма-коррекция представляет собой определенное число яркости, контраста монитора. Это число в последующем считывается из файла и позволяет откорректировать отображение изображения за счет поправок яркости.

PICT – это собственный формат Макинтош. Формат способен включать в себя как растровую, так и векторную информацию, текст, а также звук, использует RLE-компрессию. Битовые PICT-изображения могут иметь абсолютно любую глубину битового представления. Векторные же PICT-изображения, которые практически исчезли из использования в наши дни, имели необычные проблемы толщины линии и другие отклонения во время печати.

Формат используется для Макинтош, и при создании определенных презентаций только для Мак. На обычных компьютерах (не мак) PICT – формат представлен с расширением.pic или.pct, считывается определенными программами, работа с этим форматом зачастую бывает не простой.

PDF –формат предложен и разработан компанией Adobe, как формат для электронной документации, различных презентаций и верстки для пересылки его по электронной почте. И его проектная особенность была обеспечить компактный формат. По этим причинам все данные в pdf могут сжиматься, причем особенность в нем такая, что к разного рода информации применяются разные, более подходящие для этих типов данных сжатия: JPEG, RLE, CCITT, ZIP.

PCX – формат растрового изображения. Файлы pcx типа используют стандартную палитру цветов, этот формат был расширен для хранение 24-битных изображений. Этот формат аппаратно зависим. Предназначен хранить информацию в файле в том же виде, что и в видео-плате. Чтобы совместить этот формат со старыми программами необходима поддержка EGA-режима видеоконтроллера. Алгоритм сжатия быстрый и занимает малый объём памяти, но не очень эффективен, не подойдет для сжатия фотографий и детальной компьютерной графики.

ICO – этот формат разработан для хранения значков файлов. Размеры ico файлов могут быть любыми, но наиболее используемые значки со сторонами в 16, 32 и 48 пикселей. Еще используются иконки с размерами 24, 40, 60, 72, 92, 108, 128, 256 пикселей. Данные в значках обычно не сжимаются. Значки бывают в цвете True Color, High Color , или с четко фиксированной палитрой. По своей структуре файлы ICO наиболее близки к BMP формату, но отличаются от bmp присутствием маски, накладываемой на задний план с помощью операции побитового «И», что дает возможность реализовать прозрачность.

Наложение основного изображения при помощи «исключающего ИЛИ» может даже инвертировать пиксели там, где задний план был не замаскирован. А уже с Windows XP начали поддерживаться 32-битные иконки - каждому пикселю соответствует 24-бита цвета плюс 8-битный альфа-канал, который позволяет реализовать частичную прозрачность 256 уровней. При помощи альфа-канала также имеется возможность отобразить значок со сглаженными краями а также с тенью, сочетать с разным фоном, маска значка в этом в таком случае игнорируется.

CDR – это векторный формат изображения или рисунка, созданный при помощи программы CorelDRAW. Данный формат разработан компанией Corel для его использования в собственных программных продуктах компании. CDR — изображения не поддерживаются многими графическими редакторами. Но это не проблема, файл можно легко экспортировать при помощи все того же CorelDRAW в более распространенные форматы изображений. Изображения, созданные в CorelDRAW и имеющие расширение CDR также можно открыть программой Corel Paint Shop Pro. Для наилучшей совместимости, компания Corel рекомендует сохранять файлы в CorelDRAW формате CDR более ранней версии. Файлы CDR десятой и более ранней версии, можно открыть используя и программу Adobe Illustrator.

AI — это векторный формат изображений, название которого произошло от сокращения имени векторного редактора AdobeIllustrator. Поддерживается практически всеми графическими программами, которые каким либо образом связанны с векторной графикой. Ai является одним из лучших промежуточных посредников для передачи изображения из одного редактора в другой. Отличительной и очень важной чертой формата является его наибольшая стабильность и совместимость с PostScript, что представляет большую ценность для издательств полиграфической продукции.

RAW – это формат данных, содержащий в себе необработанную информацию (или обработанную в минимальной степени), созданный напрямую поступающей информацией с матрицы фотокамеры (видеокамеры и д.р.). Этим форматом обозначают не только фото данные, но и исходные данные звукозаписи или видео. Данный формат хранит всю информацию о файле и имеет больший потенциал для обработки фотографий, нежели формат JPG. RAW сохраняет максимально возможное качество. Данные в RAW-файлах могут быть несжатыми, сжатыми без потерь или сжатыми с потерями.

RAW — файлы у ряда производителей фотокамер, имеют собственный формат расширения такой как у Canon – CR2, Nikon – NEF. У многих других предложенный Adobe формат DNG, это такие компании как Leica, Hasselblad, Samsung, Pentax, Ricoh. Если в фотошопе отсутствует камера raw для вашего фотоаппарата, то файлы не откроются, для этих целей создана от адобе.

SVG – формат масштабируемой векторной графики (Scalable Vector Graphics). Формат создан W3C. В соответствие со спецификацией он создан для описания двумерной векторной и смешанной векторной/растровой графики в XML. Включает в себя три типа объектов: фигуры, изображения и текст. Поддерживает неподвижную, анимированную так и интерактивную графику. Создавать и редактировать можно как в текстовых редакторов посредством правки кода, так и в любом графическом редакторе для векторной графики (Adobe Illustrator, Inkscape, CorelDRAW, Corel SVG Viewer). SVG – это открытый стандарт не является чьей либо собственностью.

Из достоинств формата SVG можно выделить. Масштабируемость без потери качества изображения. Текст в SVG является текстом, а не изображением, благодаря этому его можно выделять, копировать, он индексируется поисковиками (при использование на сайте). Интерактивность графики, дает возможность к каждому из элементов привязать свои события. Доступность использования растровой графики внутри документа. Анимация, которая реализована в SVG с помощью языка SMIL. Совместимость с CSS, дает возможность задавать свойства объектов такие как, цвет, фон, прозрачность и др.. SVG легко интегрируются с HTML и XHTML документами. Уменьшение количества запросов HTTP. Небольшой вес файла по сравнению с растровой графикой.