Вопрос

Как относительный новичок в MFC, я много вижу контексты устройства (DCS). Я смутно понимаю, что это что-то делать с рисунком, но специфики не очень хорошо объяснены где-нибудь, что я могу найти. Что означает создание «совместимого контекста устройства», и почему это важно? Что делает SelectObject, и как я должен сделать совместимость постоянного тока?

Это было полезно?

Решение

Контекст устройства - это просто место, где происходит рисунок, поэтому, если у вас есть два разных DC, вы рисуете в двух разных местах. Вид как файл ручка.

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

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

Наличие совместимых контекстов означает, что его эффективный для передачи данных изображения между ними, поскольку требуется мало или без перевода данных. На другой экстремальном случае, если у вас есть 256 цветная палитра, 8 битовой карты, и вы пытаетесь свернуть ее на экран, который имеет 8 битов, каждый из RGBA на пиксель, каждый последний пиксель потребует значительного массажирования, так как его копируется, и поэтому копирование несовместимых растровые изображения очень намного медленнее. Согласно документации SDK Win32, по крайней мере, BitBLT () и statheblt () "преобразуют формат цвета источника, чтобы соответствовать формату назначения", так что это можно сделать.

Исследуйте CreateCompatibleDCOBLEDC () и CreateCompatibleTibitmap () в качестве отправных точек для того, как создавать контексты рисования, которые совместимы с уже существующими.

SelectObject () элементы управления, ресурсы в данный момент в настоящее время активны в контексте устройства. Контекст имеет текущую ручку, кисть, шрифт и растровое изображение. Они делают много других GDI звонков проще, позволяя вам вспомнить меньше параметров. Например, вам не нужно указывать шрифт при использовании TextOUT (), но если вы хотите изменить шрифт, вот где находится SelectObject (). Если вы подарите SelectObject () ручку на шрифт, возврат Значение - это ручка для шрифта, который был в действительности, и последующие операции используют новый шрифт. Поведение одинаково для других видов ресурсов, ручек, кистей и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top