DFlyer
<3 MJ
offline
Опыт:
43,079Активность: |
Делаю курсовую, нужна ваша помощь. )
Имеется битмап-картинка (bmp). Нужно сделать два преобразования попиксельно: 1. Повернуть (наклонить) на угол fi, который вводится в поле edit. Может у кого есть готовый алогритм? Можно тормозной, но чтоб не очень громоздкий и чтоб работал. В инете нашёл пару вариантов, но либо не работает, либо как-то коряво. 2. Масштабировать изображение на mX, nY (m и n вводятся в edit, причём m!=n). Я пытался делать что-то типа этого: » Code Image1 - исходное изображение Image2 - результат Код:
Знаю, что намудил. Надеюсь на вашу помощь). PS: нужно обойтись без OpenGL и DirectX. |
05.01.2009, 10:56 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
бред какой-то, почему бы просто не использовать стандартные методы - ручками писать это геморр и далеко не оптимально
по идее тебе нужно брать итоговый канвас(то есть такой который получается после преобразования) и перебирая все его точки, определять какая из точек исходного канваса попадет в текущую. Нужно записать пару формул, обратных тем преобразованиям которые делаешь и по ним определять нужную точку. Готовых алгоритмов у меня нет, ибо это бред, то что можно написать ручками "попиксельно" - это, максимум, линейный алгоритм ресамплинга, качество настолько говневое что такая реализация имеет чисто геморройный характер, никакого реального применения. http://ru.wikipedia.org/wiki/Цифровая_обработка_изображений Естественно, что если пытаться что-то нормальное делать (бикубический), то есть добавлять сплайны для рассчета пикселя, то с учетом того что используется дельфийская канва, это будет жестоко лагать |
05.01.2009, 11:08 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
Насчет "повернуть" - нашел у себя на винте функцию. В аттач прицепил пример.
Вообще не рекомендую использовать свойство Pixels, ибо тормозит жутко. Лучше использовать ScanLine[Row] (свойство TBitmap), которое возвращает для "строки" изображения указатель на массив сырых данных вида [BGRABGRA...BGRA] длиной Bitmap.Width * 4 (если картинка 32 битная) или [BGRBGR...BGR] длиной Bitmap.Width * 3 (если картинка 24 битная) |
05.01.2009, 11:56 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
43,079Активность: |
Цитата:
Ни о каком реальном применении речи не идёт. Тема курсовой - это "ООП". Т.е. просто показать что такое. Цитата:
Какие? |
||
05.01.2009, 12:00 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
Операции типа *Blt обьекта Device Context |
05.01.2009, 12:21 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Scorched
offline
Опыт:
7,912Активность: |
Второй пункт можно сделать с помощью TCanvas.CopyRect например. Для курсача думаю сойдет =)
Цитата:
ну дельфи - это вообще не оптимально |
|
05.01.2009, 13:24 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
43,079Активность: |
Цитата:
Можно подробней, пожалуйста? |
|
05.01.2009, 13:34 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
Цитата:
|
|
05.01.2009, 13:42 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Scorched
offline
Опыт:
7,912Активность: |
Цитата:
ну там указывается рект-источник(TRect), рект-приемник и канва-источник - не помню в каком порядке =\ работает так - из канвы-источника вырезается кусок, обрамленный рект-источником и вставляется в рект-приемник канвы-приемника(той, что вызывает метод). в зависимости от полей ректов картинка может копироваться с увеличением/уменьшением =) ну в хелпе ты яснее прочитаешь =\ Scorched добавил: Цитата:
единственный плюс дельфи - быстрая разработка интерфейса. если не пользоваться его неоптимальными компонетами, то от быстрой разработки, равно как и от дельфимало что остается Цитата:
ты таки не поверишь, что другие знают все эти элементарности не хуже тебя Отредактировано Scorched, 05.01.2009 в 17:02. |
|||
05.01.2009, 13:46 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
Цитата:
размер приложения, ровно как и быстродействие, уже давно не настолько критичны - критичны человеко-часы а не машино-часы учитывая интересы заказчика, сначала задача должна решаться хоть как-то, а потом уже можно пытаться оптимизировать какие-то ее части, путем замены составляющих решение модулей / компонентов (вот почему ООП так модно) на оптимизированные. типичный пример - delphi интерфейс в связке с набором dll написанных на asm или C ты таки-не поверишь на чем и как написан MdlVis, так что это не такое уж и уг как некоторые несведущие люди говорят |
|
05.01.2009, 14:09 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
43,079Активность: |
Ладно, давайте обсуждать не "Дельфи гавно/круто", а сабж). Вопросы всё ещё в силе. |
05.01.2009, 14:13 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|