Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.20;
Скачать: CL | DM;

Вниз

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

 
Nostradamus ©   (2002-10-12 21:53) [0]

Как перевернуть картинку не находящуюся в TDXImageList, а просто подгружаемую мной вручную. Нашёл ещё DrawRoate у TDXDraw.Surface, но чё-то оно у меня не переварачивает ничего... :-(


 
Nostradamus ©   (2002-10-12 23:15) [1]

Только что загрузил FastLib при попытке переворота и прорисовке графики вообще вся прога виснет.


 
MBo ©   (2002-10-14 08:04) [2]

Какую именно картинку надо перевернуть? Bmp?


 
Nostradamus ©   (2002-10-18 16:46) [3]

Да Bmp ну или Dib (хотя по большому счёту какая разница)


 
MBo ©   (2002-10-18 16:48) [4]

StretchBlt c отриц. высотой


 
Nostradamus ©   (2002-10-18 21:28) [5]

>Mbo
Блин не знаю, уже чё только не перепробовал. Чё-то я торможу. Подскажи что я тут не так делаю???


var
B : TBitmap;
TempBmp : TBitmap;
begin

...
TempBmp := TBitmap.Create;
TempBmp.Width := 144;
TempBmp.Height := 142;
TempBmp.LoadFromFile(FileName);
B := TBitmap.Create;
B.Width := 144;
B.Height := 142;

StretchBlt(B.Handle, 0, 0, 144, -142, TempBmp.Handle, 0, 0, 144, 142, SRCCOPY);
...

end;


 
Gandalf   (2002-10-18 22:36) [6]

Попробуй:
B.Canvas.CopyRect(Rect(0,142,144,0),TempBmp.Canvas,Rect(0,0,144,142));


 
Nostradamus ©   (2002-10-20 20:05) [7]

>Gandalf
Огромное спасибо - сработало.


 
Nostradamus ©   (2002-10-20 20:29) [8]

Хотя... хм... всё равно не совсем то оно таким образом делает флип как бы, а мне нужно её перевернуть на 90 градусов.


 
Gandalf   (2002-10-20 21:06) [9]

>Хотя... хм... всё равно не совсем то оно таким образом делает >флип как бы, а мне нужно её перевернуть на 90 градусов.

Извини но ты просил (см. выше)

>...Как перевернуть картинку не находящуюся
^^^^^^^^^^^
ПОвернуть (Rotate,Revolve) и ПЕРЕвернуть (Mirrow,Flip) - это разные вещи.
А девяносто градусов это тоже не сложно - но тут тебе CopyRect не поможет - надо по пикселям работать.


 
Nostradamus ©   (2002-10-20 21:40) [10]

>Gandalf
Ну дык как с этими пикселями работать чтоб картинку на 90 градусов перевернуть???
Я могу предположить что нужно просто в цикле пройтись по всем пикселям нарисовать их в нужном месте на другом битмапе, но как то это звучит коряво, может есть способ получше?


 
Nostradamus ©   (2002-10-20 23:16) [11]

Вот набросал код для переворота на 90 градусов попиксельно. Код работает, НО только для квадратных рисунков, а вот для рисунков произвольного размера чё-то никак алгоритм не шифрану...


procedure TMain.Rotate90n(const Src : TBitmap; var Dest: TBitmap; K: Integer);
var
I, J, N : Integer;
B : TBitmap;
begin
if (K < 1) or (K > 3) or (not Assigned(Src)) or (not Assigned(Dest)) then
Exit;

B := TBitmap.Create;
B.Assign(Src);

for N := 1 to K do begin
Dest.Width := B.Width;
Dest.Height := B.Height;

for I := 0 to Dest.Width do
for J := 0 to Dest.Height do
Dest.Canvas.Pixels[I, J] := B.Canvas.Pixels[J, B.Height + 1 - I];

B.Assign(Dest);
end;

B.Free;
end;


 
MBo ©   (2002-10-21 07:02) [12]

В StretchBlt используется не Bitmap.Handle, а Bitmap.Canvas.Handle - но этот метод подходит для горизонтального или вериткального отражения.
Для поворота на 90*N градусов можно использовать присвоение цветов, подобное описанное Nostradamus, для увеличения скорости лучше пользоваться Scanline.
Алгоритм для поворота неквадратной - если Src размером M*N, то
результат N*M


 
Rouse_ ©   (2002-10-21 07:31) [13]

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035159435&n=9

Желаю успехов


 
MBo ©   (2002-10-21 07:39) [14]

>Rouse_
для 90*N градусов этот алгоритм невыгоден по скорости и может давать неприятный сдвиг на пиксел из-за ошибок округления.



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

Текущий архив: 2003.03.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
14-64328
Вопрошающий
2003-03-04 09:51
2003.03.20
Шаблоны в Excel


14-64365
Novic
2003-03-05 10:06
2003.03.20
Сохранение проекта


14-64387
Fiend
2003-03-06 09:37
2003.03.20
И снова InterBase PLAN - это вовсе не трава, но уже просто трёп


1-64201
Karros
2003-03-07 21:54
2003.03.20
Кто сделает меньше ?


3-64014
RDA
2003-02-27 19:05
2003.03.20
Query без BDE