Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Drednote
0 / 0 / 0
Регистрация: 14.02.2015
Сообщений: 5
#1

Изменение формы загруженной картинки, OpenGL - C++

14.02.2015, 23:01. Просмотров 307. Ответов 4
Метки нет (Все метки)

Здравствуйте. Я давно на этом форуме и почти все ответы по программированию нашел здесь(исключая конечно основы). Но я столкнулся с одной проблемой. Я использую OpenGl для рисовании графики. Мне требуется загрузить картинку и обрезать ее по окружности. То есть сделать так чтобы она была круглая. Я так понимаю надо создать маску по которой будут рисоваться пиксели, но я не знаю как. Подскажите пожалуйста как это сделать.
C++
1
2
3
4
5
6
7
    LPCWSTR CheckerName = L"Шашка(белая).bmp";
    image_checker = auxDIBImageLoad(CheckerName);
 
    glRasterPos2d(0,0);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glPixelZoom(0.7, 0.7);
    glDrawPixels(image_checker->sizeX, image_checker->sizeY, GL_RGB, GL_UNSIGNED_BYTE, image_checker->data);
Вот код загрузки картинки и отрисовки его.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2015, 23:01     Изменение формы загруженной картинки, OpenGL
Посмотрите здесь:

C++ Builder Изменение формы, являющейся главной
C++ Изменение формы курсора
Изменение размеров формы C++ Builder
C++ WinAPI Изменение прозрачности формы
Изменение размеров формы C++ Builder
C++ Builder Как избавится от рамки цвета формы при движении картинки?
Изменение картинки при нажатии на BitBtn C++ Builder
изменение размера формы C++ Builder
C++ Изменение формы
C++ Builder Изменение заголовка формы
C++ Builder Изменение размера формы
C++ WinAPI Изменение пикселей картинки WinAPI

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,910
Завершенные тесты: 1
15.02.2015, 11:37     Изменение формы загруженной картинки, OpenGL #2
Делай раз: загружаем картинку в 32-битном представлении (4 байта на пиксель, точнее на тексель). Можно загружать из 32-битного bmp, можно самому руками распихать байты куда требуется.
Делай два: создаём в четвёртом байте альфа-маску. В каждом 4 байте каждого текселя. Посчитать расстояние от центра изображения до текущей точки несложно, сравнить с радиусом тоже. В зависимости от результатов сравнения пишем в 4-й байт 0 или 255.
Делай три: полученный массив загружаем в OpenGL как 32-битную текстуру (GL_BGRA, GL_UNSIGNED_BYTE).
Делай четыре: включаем блендинг glEnable(GL_BLEND);
Вот и всё.
Drednote
0 / 0 / 0
Регистрация: 14.02.2015
Сообщений: 5
15.02.2015, 12:01  [ТС]     Изменение формы загруженной картинки, OpenGL #3
Nick Alte, Конечно спасибо. Но вот то что ты описал я в принципе знал. Мне не понятно как это в коде сделать. Я не такой уж и опытный программист. Это моя первая работа с картинками и пикселями, так что я много не знаю. Мне бы привести пример загрузки картинки в 32 битном представлении и замены пикселя.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,910
Завершенные тесты: 1
15.02.2015, 12:23     Изменение формы загруженной картинки, OpenGL #4
Drednote, надо изучать работу с массивами. В простейшем случае картинка - это массив unsigned char, в котором на каждый пиксель приходится по 4 значения, а сами пиксели уложены построчно. Так что надо найти соответствие координат точки изображения и смещению в массиве. В самом трудном случае в каждую четвёрку байтов надо читать из файла по 3 байта, причём строки будут идти в обратном порядке (снизу вверх). Ну а уж если знаешь, где в массиве лежит интересующее тебя значение, переписать его нетрудно.
Drednote
0 / 0 / 0
Регистрация: 14.02.2015
Сообщений: 5
15.02.2015, 13:51  [ТС]     Изменение формы загруженной картинки, OpenGL #5
Nick Alte, окей. Спасибо. Пробую что-нибудь сделать
Yandex
Объявления
15.02.2015, 13:51     Изменение формы загруженной картинки, OpenGL
Ответ Создать тему
Опции темы

Текущее время: 03:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru