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

C++

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

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

14.02.2015, 23:01. Просмотров 320. Ответов 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
Посмотрите здесь:

Изменение пикселей картинки WinAPI - C++ WinAPI
Добрый день. Не могу понять как изменить цвет картинки(некоторых пикселей этой картинки). с помощью WinApi после отображения файла в...

Изменение картинки при нажатии на BitBtn - C++ Builder
Как правильно записать условие? if (BitBtn6->Glyph->LoadFromFile("bmp\\strelka_up.bmp")) ...

Изменение формы - C++
Подскажите пожалуйста как создаются такие формы?

изменение размера формы - C++ Builder
я в проэкте создаю большое количество элементов, и частенько они вылазят за установленные пределы формы. если бы я создавал элементы...

Изменение заголовка формы - C++ Builder
Добрый день! Подскажите пожалуйста, как убрать шапку и окантовку формы (на событии onClick), затем по событию onClick 2- восстановить...

Изменение формы курсора - C++
Надо сделать одну простую вещь. Чтобы при наведении курсора на объект место стрелочки высвечивалась рука. Как можно это реализовать?

Изменение размера формы - C++ Builder
Все знаем как перемещать форму не за заголовок: OnMouseDown: Panel1->Tag = 1; OnMouseMove: if(Panel1->Tag) { ...

Изменение прозрачности формы - C++ WinAPI
В Дельфи есть возможность изменять уровень прозрачности формы от 255 до 0. А каким образом это можно осуществить средствами WinApi?...

Изменение размеров формы - C++ Builder
Извиняюсь за столь заезженный пост. У меня стиль формы bsNone, сделано это для того что бы там много чего можно было проскинировать....

Изменение размеров формы - C++ Builder
У меня форма без внешнего вида. Мне нужно эмулировать нажатия кнопок максимизировать и восстановить исходный вид писал следующее ...

Изменение формы, являющейся главной - C++ Builder
Необходимо написать программу, напоминающую по своему поведению инсталляторы: рисуется окно, что-то на нём делается, надимается кнопка, это...

Как избавится от рамки цвета формы при движении картинки? - C++ Builder
Здрасте. Код: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 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
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 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
Ответ Создать тему
Опции темы

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