Как вывести изображение на экран c
Перейти к содержимому

Как вывести изображение на экран c

Работа с графикой (C++/CLI)

демонстрируется обработка изображений с помощью Windows SDK.

В следующих разделах демонстрируется использование System.Drawing.Image класса для выполнения манипуляций с изображениями.

отображение изображений с помощью платформа .NET Framework

В следующем примере кода обработчик событий onpain изменяется для получения указателя на Graphics объект главной формы. OnPaintфункция предназначена для Windows Forms приложения, которая, скорее всего, создается с помощью мастера Visual Studio приложений.

Как максимально быстро вывести на экран картинку в Windows 7 через winapi на Си?

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

Я пока нашёл один подходящий способ: картинка в .bmp файле, в начале работы программы она будет загружена в память через LoadImage(), хранится там всё время, пока работает программа и выводится на экран при необходимости с помощью BitBlt().

Вот кусок кода из инета, который у меня работает:

Вопрос: можно ли выводить картинку на экран быстрее, или использовать этот код?

Строго говоря под WinApi другого способа и не предусмотрено, ну да ладно.

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

Рекомендую вам оставить как есть, если станет лагать тогда и думать про директиксы и опенджиэли.

Если проект строго под винду, то OpenGL использовать не стоит, поумолчанию он будет медленее DirectX.

user avatar

Быстрее, чем BitBlt или SetDIBitsToDevice в GDI не бывает.

Если же вам нужно еще быстрее, то смотрите в сторону Direct2D или OpenGL.

user avatar

Что значит «быстрее»? Сейчас при каждой перерисовке окна у вас выводится изображение. Выводится с обычной скоростью, незаметной глазу, практически весь интерфейс всех окон так и работает. Оставляйте этот код, он для этого и предназначен. Тока memBit логически не вяжется, переименуйте в dcBitmap.

Обновление

Я, конечно не гуру в WinApi, но очевидно, что код выше, как минимум короче, следовательно ресурсов на его использование уйдёт меньше. Плюс есть выбор: формат файла(В GDI использовать не Bitmap, опять же дольше. ), плюс alpha-канал

88 — Выводим растровую картинку на экран / MFC шаг за шагом / Visual C++

Создаем проект. Запускайте VC и MFC AppWizard. Дайте имя проекту TestBmp, в первом шаге поставьте Single Document и нажимайте Finish.

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

Переключаемся на вкладку Resource, нажимаем правую кнопку мыши и выбираем пункт меню Import. В типе файлов установите Все файлы (*.*) и найдите картинку. Если все нормально, то будет так.

Как известно вся прорисовка производится в функции OnDraw класса вида (CTestBMPView). Нам туда. Вот весь код.

Итак, мы создали экземпляр класса CBitmap и прочитали в него картинку LoadBitmap передав идентификатор из ресурсов. Так же мы создали экземпляр класса контекста устройства. Создали аналог существующему CreateCompatibleDC и поместили туда картнику SelectObject и вывели её на экран функцией BitBlt, которая как раз для этого предназначена. Эта функция копирует битовую карту в контекст устройства. Вот она какая.

Указанный мной параметр просто копирует SRCCOPY, а их 15 🙂 С инвертированием и логическими операциями типа OR или AND и всякими там прибамбасами. Это мне напоминает одну песню, когда-то существовавшей группы Мальчишник. Вот эти слова из песни — и на голове я имел её тоже. 🙂 Как раз подходят.

Вы можете запустить программу на выполнение. Картинка будет на экране. Вот только в предварительном просмотре вы её не увидите. Все просто. MFC не умеет выводить картинки на печать .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *