Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];

Вниз

Image   Найти похожие ветки 

 
Rim   (2004-02-24 23:23) [0]

Подскажите пожалуйста,как Image повернуть на 45 и 90 градусов.


 
Defunct   (2004-02-24 23:27) [1]

Там есть массив точек Images.Canvas.Pixels[x,y], вот их и переворачивайте. Процедуру поворота прийдется придумать самостоятельно.


 
Rim   (2004-02-25 16:45) [2]

Мне сложновато. Может кто поможет?


 
Palladin   (2004-02-25 16:47) [3]

Сколько?


 
Rim   (2004-02-25 16:50) [4]

Сколько? Что?


 
Ega23   (2004-02-25 16:53) [5]

Сколько? Что?

Денег сколько?


 
Sandman25+1   (2004-02-25 16:55) [6]

Скачайте бесплатную библиотеку Graphics32. Там есть отличные компоненты для просмтра изображений. В том числе и повороты реализваны.


 
Ega23   (2004-02-25 16:58) [7]

Хотя где-то я видел как битмап крутить. Но вот где - никак вспомнить не могу. Может в 7-й Делфе...


 
Palladin   (2004-02-25 17:03) [8]

вспониминаем школьною тригонометрию... ну а на 90 градусов трудно разве x с y поменять? хотя смотря в какую сторону...


 
MBo   (2004-02-25 17:09) [9]

XNew=Xc+(XOld-Xc)*CosFi+(YOld-Yc)*SinFi
YNew=Yc-(XOld-Xc)*SinFi+(YOld-Yc)*CosFi

но лучше из этих формул выразить XOld и YOld и для каждой точки повернутой картинки находить соотв. точку из исходной (чтобы не было дырок)

для углов 90*N - как Palladin сказал.


 
Ega23   (2004-02-25 17:14) [10]

Не, алгоритм кручения понятен. А я где-то готовый метод видел (или функцию?). Причём не от "левых" производителей.
Хотя может это мои глюки...


 
Sandman25+1   (2004-02-25 17:16) [11]

Не советую через Pixels работать - слишком медленно.


 
WebErr   (2004-02-25 17:20) [12]

для 45:

k = 1/sqrt(2)
kdx = k*(x - x0) // x0 - середина по x
kdy = k*(y - y0) // y0 - середина по y
x1 = kdx - kdy + xc // x1 - новый x
y1 = kdx + kdy + yc // y1 - новый y

xc и yc - домашнее задание для начинающих
для 90:

dx = x - x0
dy = y - y0
x1 = dy + xc
y1 = dx + yc

гы! - линейная алгебра и геометрия - том 1. :))))


 
MBo   (2004-02-25 17:21) [13]

>Sandman25
В статьи загляни

>Ega23
В NT-системах PlgBlt или SetWorldTransform с XForm вращения


 
WebErr   (2004-02-25 17:23) [14]

Лучше всего работать через массив байтов, а потом stretch"ать :)))) А видел ты нечто подобное в библиотеке DelphiX Direct3D либо в OpenGL. Мне ни то, ни другое не нравится - предпочитаю создавать свои 3D модули! :))))


 
Sandman25+1   (2004-02-25 17:24) [15]

[13] MBo © (25.02.04 17:21)

Не нашел. За какую дату?


 
MBo   (2004-02-25 17:28) [16]

>Sandman25+1
2 страница. "Поставить точку"


 
Sandman25+1   (2004-02-25 17:33) [17]

[16] MBo © (25.02.04 17:28)

Спасибо!
Неслабый класс...


 
Serge   (2004-02-25 17:38) [18]

Взято с http://www.sources.ru/delphi/graphics/rotate_bitmap.shtml

Как повернуть Bitmap на любой угол

Const PixelMax = 32768;
Type
pPixelArray = ^TPixelArray;
TPixelArray = Array[0..PixelMax-1] Of TRGBTriple;

Procedure RotateBitmap_ads(
SourceBitmap : TBitmap;
out DestBitmap : TBitmap;
Center : TPoint;
Angle : Double);
Var
cosRadians : Double;
inX : Integer;
inXOriginal : Integer;
inXPrime : Integer;
inXPrimeRotated : Integer;
inY : Integer;
inYOriginal : Integer;
inYPrime : Integer;
inYPrimeRotated : Integer;
OriginalRow : pPixelArray;
Radians : Double;
RotatedRow : pPixelArray;
sinRadians : Double;
begin
DestBitmap.Width := SourceBitmap.Width;
DestBitmap.Height := SourceBitmap.Height;
DestBitmap.PixelFormat := pf24bit;
Radians := -(Angle) * PI / 180;
sinRadians := Sin(Radians);
cosRadians := Cos(Radians);
For inX := DestBitmap.Height-1 Downto 0 Do
Begin
RotatedRow := DestBitmap.Scanline[inX];
inXPrime := 2*(inX - Center.y) + 1;
For inY := DestBitmap.Width-1 Downto 0 Do
Begin
inYPrime := 2*(inY - Center.x) + 1;
inYPrimeRotated := Round(inYPrime * CosRadians - inXPrime * sinRadians);
inXPrimeRotated := Round(inYPrime * sinRadians + inXPrime * cosRadians);
inYOriginal := (inYPrimeRotated - 1) Div 2 + Center.x;
inXOriginal := (inXPrimeRotated - 1) Div 2 + Center.y;
If
(inYOriginal >= 0) And
(inYOriginal <= SourceBitmap.Width-1) And
(inXOriginal >= 0) And
(inXOriginal <= SourceBitmap.Height-1)
Then
Begin
OriginalRow := SourceBitmap.Scanline[inXOriginal];
RotatedRow[inY] := OriginalRow[inYOriginal]
End
Else
Begin
RotatedRow[inY].rgbtBlue := 255;
RotatedRow[inY].rgbtGreen := 0;
RotatedRow[inY].rgbtRed := 0
End;
End;
End;
End;

{Usage:}
procedure TForm1.Button1Click(Sender: TObject);
Var
Center : TPoint;
Bitmap : TBitmap;
begin
Bitmap := TBitmap.Create;
Try
Center.y := (Image.Height div 2)+20;
Center.x := (Image.Width div 2)+0;
RotateBitmap_ads(
Image.Picture.Bitmap,
Bitmap,
Center,
Angle);
Angle := Angle + 15;
Image2.Picture.Bitmap.Assign(Bitmap);
Finally
Bitmap.Free;
End;
end;


 
WebErr   (2004-02-25 17:43) [19]

Прочти внимательно, но сделай проще! У каждого свои потребности, на каждый отдельно взятый пример! :))))


 
Rim   (2004-02-26 16:56) [20]

Спасибо всем!


 
WebErr   (2004-02-26 17:01) [21]

Always welcome! :))))



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.008 c
3-25703
Max
2004-02-10 20:20
2004.03.09
TSQLConnection не соединяется с базой


1-25813
Galerus
2004-02-25 20:36
2004.03.09
Сменить картинку .exe файла!


8-25828
Грибовод
2003-11-09 10:57
2004.03.09
Затемнение


6-25835
redacid
2004-01-04 01:56
2004.03.09
Разрешение IP Address в имя на Win 98 SE


1-25792
sapsi
2004-02-26 08:15
2004.03.09
Панель как в винампе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский