русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Битовые образы, зависящие от устройства.

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

В первом случае каждому пикселю на экране ставится в соответствие некоторое количество бит. Например, если монитор может отобразить 256 цветов, то используется 8 байт на один пиксель. Для каждой скан-линии (строки растра) первый байт представляет цвет самого левого пикселя, второй байт – следующего пикселя и т.д. Подобная организация видеопамяти, бала, например в CGA – мониторах.

Пример второго вида организации битовых образов – это EGA и VGA - мониторы, которые в большинстве стандартов поддерживают плоскостное представление изображения. Цветной битовый образ для 16-цветного VGA использует 4 цветовые плоскости для представления 16 цветов. Массив битов начинается с верхней скан-линии. Цветовые плоскости для каждой скан-линии хранятся последовательно: красная плоскость - первой, зеленая плоскость – второй, затем голубая плоскость и плоскость интенсивности. Каждая плоскость имеет свой адрес в оперативной памяти.

На основе вышеизложенного можно сделать вывод, что в каждом конкретном случае зависимый битовый образ организован по-разному. И если, программа создает сама битовый образ (например, на основе функций CreateBitmap, CreateBitmapInderect), то она должна сама определять тип, количество цветовых плоскостей. Формат данных функций следующий:

HBITMAP MyBitmap1, MyBitmap2;

BITMAP MyStruct;

MyBitmap1=CreateBitmap(nWidth, nHeight, cPlanes, cBitsPerPel, lpvBits);

MyBitmap2=CreateBitmapInderect(&MyStruct);

где nWidth – ширина создаваемого битового образа,

nHeight - высота создаваемого битового образа,

cPlanes - количество битовых плоскостей,

cBitsPerPel - число битов на один пиксель,

lpvBits - указатель на битовый образ.

Структура BITMAP содержит перечисленные данные непосредственно.

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

HBITMAP MyBitmap;

MyBitmap = CreateCompatibleBitmap(hdc, xWidth,yHeght);

где hdc – описатель контекста устройства, остальные два параметра определяют ширину и высоту создаваемого битового образа. Созданный таким образом битовый образ будет иметь структуру, определяемую характеристиками устройства.

Теперь перейдем к вопросу вывода зависимого битового образа на конкретное устройство. Для данного вида графической информации не существует функций, осуществляющих непосредственный вывод в контекст устройства (подобных SetDIBitsToDevice и StretchDIBits для независимых битовых образов) на основе описателя битовых образов (HBITMAP). Для их вывода используется следующий механизм: Битовый образ, выбранный в одном контексте, может быть скопирован в другой контекст. Таким образом, в процессе участвуют два контекста: первый (обычный), в который необходимо скопировать битовый образ, и второй – в котором содержится изображение. Второй контекст, в данном случае, необходимо создать; создается он в памяти и не соответствует конкретному устройству вывода. Он так и называется – контекст памяти. Для того, чтобы дальнейшая работа по копированию битовых образов происходила без проблем, оба контекста должны быть совместимыми, или, говоря другими словами, контекст памяти необходимо создать на основе контекста устройства. Это делается при помощи следующей функции:

HDC hdcMem;

hdcMem = CreateCompatibleDC(hdc);

где hdc – описатель контекста, куда будет вестись вывод изображения.

Второй этап заключается в выборе битового образа в контекст памяти по тому же образу, каким любой объект GDI выбирается в контекст устройства:

SelectObject(hdcMem,MyBitmap);

И только после этого можно скопировать битовый образ в контекст устройства:

BitBlt(hdc, xDest, yDest, xWidth, yHeight, hdcMem, xSrc, ySrc, dwROP);

где xDest, yDest, xWidth, yHeight – определяют координаты прямоугольника на контексте устройства, в который осуществляется вывод изображения, xSrc, ySrc – определяют начальное положение угла источника, с которого начинается вывод, а dwROP – идентификатор знакомой нам растровой операции.

После окончания работы с контекстом памяти, его необходимо удалить:

DeleteDC(hdcMem);

Существует и аналог масштабируемого вывода для зависимых битовых образов:

StretchBlt(hdc, xDest, yDest, xDestWidth, yDestHeight, hdcMem, xSrc, ySrc, xDSrcWidth, ySrctHeight, dwROP),

в которой напрямую указываются размера выводимого изображения и размеры приемника.

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

Просмотров: 606


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.