![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Про алгоритм вращения
Mihey © (2004-05-16 21:28:00)Изображение вращается на некоторый угол без использования каких-либо фильтров сглаживания. Если я поверну изображение назад, изменится ли оно по сравнению с первоначальным???
Pa5ha (2004-05-18 15:06:00) [1]
> Слухайте, а вот если я вращаю на 45 градусов.
Смотря как. Если правильно - то нет.
> не хочешь сделать рисунок векторным?
Ты знаешь способ сделать BMP векторным?
марсианин (2004-05-17 20:03:00) [2]не хочешь сделать рисунок векторным? тогда можно будет делать все что угодно без потери качества
Mihey (2004-05-17 17:37:00) [3]2 MBo:
Как по контуру букв в первой картинке. Вот на картинке я показал затею:
http://www.hot.ee/mvps19/pic1.png
Этого я хочу добиться следующим образом - поворачиваю большую картинку на угол, создаю прямоугольный край (feathering, по форме вертикальный), накладываю, предварительно всё, что левее через FillRect простой (быстрее, чем полигон) стираю, затем вращаю изображение назад.
MBo (2004-05-17 16:24:00) [4]Я не знаю точно, что такое Feathering Mask - судя по гуглу, некий фотошоповский эффект. Нельзя ли это сделать наложением фильтра?
Или, может, нечто похожее:
http://mbo88.narod.ru/pics.htm
Mihey (2004-05-17 15:05:00) [5]Нужно сделать что-то вроде Feathing Mask под углом. Сам Feathering на самом деле состоит из некоторой полосы, которую нужно затайлить. Полоса эта накладывается под углом на изображение и, например, всё что слева от неё закрашивается чёрным. Сначала хотел сделать по-человечески - сгенерировать полосу, полигоном закрасить всё, что левее, наложить полосу под углом, но потом меня достало, решил по-своему всё делать. Ну и вопрос возник.
MBo (2004-05-17 14:44:00) [6]>задумал ворочать битмап, делать преобразования и обратно его ворочать
Разъясни
Mihey (2004-05-17 14:20:00) [7]Проблема в том, что для упрощения алгоритма задумал ворочать битмап, делать преобразования и обратно его ворочать. Слухайте, а вот если я вращаю на 45 градусов. Это ведь такое преобразования, которое при желании можно без знания синусов/косинусов написать. Изменится?
MBo (2004-05-17 13:12:00) [8]>Единственная проблема - границы.
Отнюдь ;))
>for x := 1 to B.Width
???
Leon (2004-05-17 11:05:00) [9]Если делать обратное преобразование, т.е. не переводить имеющуюся точку в нужную, а перебирать все нкужные и брать их из исходных то нет( точнее почти нет).
Пример кода, поворачивающего B: TBitmap;
var B2: TBitmap;
function GetPix(x,y: integer): TColor;
var xx, yy: integer;
begin
xx := cx + Round((X-cx)*cosPhi - (Y-cy)*sinPhi);
yy := cy + Round((X-cx)*sinPhi + (Y-cy)*cosPhi);
if (xx<0)or(yy<0)then
Result := clWhite
else
if (xx>B.Width)or(yy>B.Height)then
result := clWhite
else
Result := B.Canvas.Pixels[xx, yy];
end;
begin
B2 := TBitmap.Create();
B2.Assign(B);
phi := 2*3.14159/180*УголПоворота(град);
cx := B.Width div 2; // центр
cy := B.Height div 2;
sinPhi := sin(-Phi);
cosPhi := cos(-Phi);
for x := 1 to B.Width do
for y := 1 to B.Height do
B2.Canvas.Pixels[x,y] := GetPix(x, y);
B.Assign(B2);
B2.Free;
end;
Единственная проблема - границы.
MBo (2004-05-17 07:29:00) [10]Да, изменится. Стоит хранить исходное.
Он (2004-05-16 22:22:00) [11]Ещё как.