![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
CBETA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.4.2004 Репутация: 1 Всего: 1 |
Как провести сглаженную прямую, окружность, многоугольник?
Не знаю как это называют профи, поэтому попытаюсь объяснить что я подразумеваю под термином "сглаженная" Например: (условный код) MoveTo(0,0); LineTo(10,1); Линия будет нарисована со ступенькой вроде этого: -----_____ Если же такую линию провести например в Фотошопе то она будет смотреться на много изящнее. Изобразить здесь не смогу. (в общем это нужно видеть.) Возможно ли элегантное решение данной проблемы? Писать самой функции вывода графических примитивов - прямой, эллипса, и т.д.? Не представляю как. Попиксельный вывод - крайне медленно. Возможны ли какие-то другие решения? |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
В фотошопе используется метод антиалиасинга то есть пиксель немного расплывается, и высчитывается состояние отдельных клеток по X или + образному методе.
Подробнее об антиалиасинге читай вот здесь . А насчёт GDI-ных функций, то ИМХО для нормального проекта GDI сильно тормознутый... Лучше заюзать DirectX или OpenGL, в иксе скорее всего и есть такии функции но точно не могу сказать... Удачи! --------------------
|
|||
|
||||
achmed |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 12.4.2004 Репутация: нет Всего: нет |
ну наверное стоит поискать готовые MFCшные классы, реализующие эту функциональность,
где-нибудь на codeproject.com, codeguru.com/ |
|||
|
||||
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 2 Всего: 62 |
Это не есть задачи МФС.По крайней мере функций таких не встречал.Для этого есть библиотеки Opena и Directa.Кстати под этими библиотеками прекрасно работает видеокарта,(если поставить настройки ![]() ![]() ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
CBETA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.4.2004 Репутация: 1 Всего: 1 |
chipset[b]
[b]Coocky Фокус с картой не пройдет. Условия варварские ![]() Проект должен работать на любой машине, начиная с 486 и Win95. По этой же причине видимо Open и Direct отпадают. Не поставлять же этих монстров вместе с прогой. А на Win95 какой там был директ, и был ли вообще? На самом деле экстра быстродействия не требуется. Думаю вполне достаточно быстродействия GDI. Если честно, просто не хочется изобретать велосипед. achmed Поискать попробую, хотя мне почему-то никогда не удается найти именно то что нужно. (Видимо искать не умею.) И еще вопросик по теме: Как сделать градиентную заливку прямоугольника средствами GDI? Приходит в голову что-то вроде бесконечного создания и удаления кистей разных оттенков. Писать еще не пробовала, но должно выглядеть ну очень забавно. ![]() |
|||
|
||||
mr.DUDA |
|
||||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
На самом деле всё гораздо проще ![]()
Функции GetBitmapPixels и SetBitmapPixels были подробно описаны в FAQ, вот в этой теме, а текст функции Gradient - предельно простой:
Полностью проект MFC, рисующий градиентный прямоугольник, можно скачать по ссылке: Присоединённый файл ( Кол-во скачиваний: 17 ) ![]() -------------------- ![]() |
||||||
|
|||||||
CBETA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.4.2004 Репутация: 1 Всего: 1 |
mr.DUDA
Работа с Bitmap как с массивом точек. Действительно просто, когда знаешь. Кажется то что надо, Спасибо. До остального дойду сама. (надеюсь) |
|||
|
||||
CBETA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.4.2004 Репутация: 1 Всего: 1 |
mr.DUDA
А файлик то 0-oй длины |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
И в самом деле. Что-то глюкнуло, наверное... Вот рабочий линк: Присоединённый файл ( Кол-во скачиваний: 18 ) ![]() -------------------- ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
-------------------- ![]() |
|||
|
||||
CBETA |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.4.2004 Репутация: 1 Всего: 1 |
Извиняюсь, что поднимаю старую тему,
но мне кажется что тут (вернее в FAQе) есть небольшая ошибка. Функции: COLORREF *GetBitmapPixels(CBitmap &Bmp, int &W, int &H); void SetBitmapPixels(CBitmap &Bmp, COLORREF *pPixels); Чтоб они работали с (COLORREF*) нужно переставлять байты у массива. причем 2 раза, при Get.. и при Set.. (доп. время) Или хотя-бы бы переписать вот так: RGBQUAD *GetBitmapPixels(CBitmap &Bmp, int &W, int &H); void SetBitmapPixels(CBitmap &Bmp, RGBQUAD *pPixels); Если я не ошибаюсь, RGBQUAD не совсем COLORREF из МСДН:
Если переписать в том виде как храниться в памяти будет: BB GG RR 00 Еще из МСДН:
Если и это переписать в том же виде: RR GG BB 00 Только ради бога, не ругайте слишком сильно если я не права. Путаница с цветами. Запуталась совсем. |
||||
|
|||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Thanks !!!
Тема в FAQ отредактирована. Ситуация с перестановкой цветов была решена вот так:
Тогда вместо RGB и COLORREF-макросов можно использовать DIBCOLOR. Можно сравнивать между собой два DIBCOLOR-а. -------------------- ![]() |
|||
|
||||
CBETA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.4.2004 Репутация: 1 Всего: 1 |
mr.DUDA
Замучаю до конца ![]() Конструктор: DIBCOLOR(BYTE ar,BYTE ab,BYTE ag): ... лучше переписать так DIBCOLOR(BYTE ar,BYTE ag,BYTE ab): ... Порядок следования R,G,B имхо, болле привычен. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Ну, СВЕТА, погоди !
![]() Исправил. -------------------- ![]() |
|||
|
||||
AndyY |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Кстати - есть либа GDI+, в ней есть обработка антиалиасинг.
по умолчанию входит в XP, редистрибутивна (работает под 98 и 2000). тяжелая, правда. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |