Форум: "Начинающим";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Внизкак крутить картинки в delphi? Найти похожие ветки
← →
jeet (2007-11-15 09:45) [0]как крутить картинки в delphi?
← →
Jeer © (2007-11-15 09:54) [1]Так же, как и не в Delphi.
← →
jeet (2007-11-15 10:05) [2]
> Так же, как и не в Delphi.
что это значит?
← →
Jeer © (2007-11-15 10:16) [3]Это значит, что операция поворота, описанная математическим языком не зависит от языка программирования:
x2 = x1*CosA - y1*SinA
y2 = x1*SinA + y*CosA
← →
jeet (2007-11-15 10:19) [4]это понятно
как это в делфи записать
← →
Dimaxx © (2007-11-15 10:30) [5]Мда. Начни лучше с чего-нить попроще тогда...
← →
Jeer © (2007-11-15 11:39) [6]
> jeet (15.11.07 10:19) [4]
Почти также, как и на мат.языке
x2 := x1*Cos(A) - y1*Sin(A);
y2 := x1*Sin(A) + y1*Cos(A);
← →
antonn © (2007-11-16 13:13) [7]внимание, велосипед! %)
procedure CopyRotateTransparentBrush(_B_in,_B_out: TBitmap; _x,_y,centerX,centerY:integer; trColor:Tcolor; _angle: Double);
var cosRadians,_Rad,sinRadians : Double;
x,y,x_cor,y_cor,x_corS,y_corS,inXOut,inXPr,inXRotated,inYOut,inYPr,inYRotated: Integer;
RowOut, RowIn: PRGBArray;
rc1, bc1, gc1:byte;
_w,_h:integer;
begin
_Rad:=_angle; sinRadians:=Sin(_Rad); cosRadians:=Cos(_Rad);
_w:=_B_in.Width; _h:=_B_in.Height;
if _x<0 then x_corS:=abs(_x) else x_corS:=0;
if _y<0 then y_corS:=abs(_y) else y_corS:=0;
if (_x+_w)>_B_out.Width then x_cor:=_x+_w-_B_out.Width else x_cor:=0;
if (_y+_h)>_B_out.Height then y_cor:=_y+_h-_B_out.Height else y_cor:=0;
rc1:=GetRValue(trColor); gc1:=GetGValue(trColor); bc1:=GetBValue(trColor);
for x:=_h-1-y_cor downto y_corS do begin
RowIn:=_B_out.Scanline[x+_y]; inXPr:=2*(x-centerY)+1;
for y:=_w-1-x_cor downto x_corS do begin
inYPr:=2*(y-centerX)+1;
inYRotated:=Round(inYPr*CosRadians-inXPr*sinRadians);
inXRotated:=Round(inYPr*sinRadians+inXPr*cosRadians);
inYOut:=(inYRotated-1) div 2 + centerX; inXOut:=(inXRotated-1) div 2 + centerY;
if (inYOut>=0)and(inYOut<=_w-1)and
(inXOut>=0)and(inXOut<=_h-1) then begin
RowOut:=_B_in.Scanline[inXOut];
if not((RowOut[inYOut].rgbtRed=rc1)and(RowOut[inYOut].rgbtGreen=gc1)and(RowOut[inYO ut].rgbtBlue=bc1)) then
RowIn[y+_x] := RowOut[inYOut];
end;
end;
end;
end;
← →
homm © (2007-11-16 13:18) [8]> [3] Jeer © (15.11.07 10:16)
> Это значит, что операция поворота, описанная математическим
> языком не зависит от языка программирования:
Вот это телепаторище!!! :-0
Мой даже намека не дал, что речь идет о повороте изображения.
← →
Jeer © (2007-11-16 15:56) [9]
> homm © (16.11.07 13:18) [8]
Ты пообщайся с сотней студентов за год, телепатор настроишь как у Вольфа Мессинга (был такой теле*).
← →
DmT (2007-11-27 15:47) [10]А теперь изобритите велосипедII, чтобы вращался не относительно центра изображения, а в трех измерениях(хотябы относительно прямой лежащей вертикально по центру изображения).
← →
qq (2007-11-27 15:55) [11]
> А теперь изобритите велосипедII
ты сначала вопросы научись формулировать
потом командовать будешь, если доживешь
← →
@!!ex © (2007-11-27 16:20) [12]> [10] DmT (27.11.07 15:47)
5 баксов
← →
DmT (2007-11-27 17:51) [13]
> ты сначала вопросы научись формулировать
А что не правильно сформулированно? Научись довать правильную критику ;)
← →
@!!ex © (2007-11-27 17:53) [14]> А что не правильно сформулированно?
Ни панятно как крутить.
Понимаем, что вращение по третьей оси - есть фэйк?
ибо у нас всеже моник плоцкий.
Соответственно ваш вопрос не корректен тем, что там не указывается, какой конкретно алгоритм процеирования использовать.
← →
clickmaker © (2007-11-27 19:45) [15]
> jeet (15.11.07 09:45)
> как крутить картинки в delphi?
avi-файл + TAnimate
при наличии нужного кодека, можно будет крутить даже порники
← →
antonn (work) (2007-11-27 19:53) [16]
> Ни панятно как крутить.
Perspective texture mapping :)
http://desksoft.ru/index.php?forum=13&th=67
← →
oxffff © (2007-11-27 19:56) [17]
> jeet (15.11.07 09:45)
> как крутить картинки в delphi?
см. GDI+
Point destinationPoints[] = {
Point(200, 20), // destination for upper-left point of original
Point(110, 100), // destination for upper-right point of original
Point(250, 30)}; // destination for lower-left point of original
Image image(L"Stripes.bmp");
// Draw the image unaltered with its upper-left corner at (0, 0).
graphics.DrawImage(&image, 0, 0);
// Draw the image mapped to the parallelogram.
graphics.DrawImage(&image, destinationPoints, 3);
← →
clickmaker © (2007-11-27 20:01) [18]
> [15] clickmaker © (27.11.07 19:45)
>
> > jeet (15.11.07 09:45)
> > как крутить картинки в delphi?
>
> avi-файл + TAnimate
> при наличии нужного кодека, можно будет крутить даже порники
нет, порники не получится, это я спутал
Но крутить все равно можно
Кстати, где-то на зеленых полях Тырнета лежит исходник на дельфи функции RotateBitmap. Google в помощь
← →
@!!ex © (2007-11-27 20:31) [19]> Perspective texture mapping :)
Почему это так?
Модет там не перспектива подразумеваеться?
← →
DmT (2007-11-27 22:29) [20]Да я почти это и имел ввиду. только там картинка повернута относительно левой стороны(относительно нас), а я бы хотел относительнопрмой направленной вертикально(сверху_вниз) и проходящей через центр изображения.
← →
antonn © (2007-11-27 22:53) [21]
> Почему это так?
> Модет там не перспектива подразумеваеться?
>
так выдал мой телепатор:)
> DmT (27.11.07 22:29) [20]
там матрица, по ней и изменяй куда надо...
← →
vegarulez © (2007-11-28 09:56) [22]Эта программа плавно поворачивает изображение на один радиан.
uses Math;
procedure TForm1.Button1Click(Sender: TObject);
var
bm, bm1: TBitMap;
x, y: integer;
r, a: single;
xo, yo: integer;
s, c: extended;
begin
bm := TBitMap.Create;
bm.LoadFromFile("ex.bmp");
xo := bm.Width div 2;
yo := bm.Height div 2;
bm1 := TBitMap.Create;
bm1.Width := bm.Width;
bm1.Height := bm.Height;
a := 0;
repeat
for y := 0 to bm.Height - 1 do begin
for x := 0 to bm.Width - 1 do begin
r := sqrt(sqr(x - xo) + sqr(y - yo));
SinCos(a + arctan2((y - yo), (x - xo)), s, c);
bm1.Canvas.Pixels[x,y] := bm.Canvas.Pixels[
round(xo + r * c), round(yo + r * s)];
end;
Application.ProcessMessages;
end;
Form1.Canvas.Draw(xo, yo, bm1);
a := a + 0.05;
Application.ProcessMessages;
until Form1.Tag <> 0;
bm.Destroy;
bm1.Destroy;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Tag := 1;
end;
← →
Рамиль © (2007-11-28 11:14) [23]
> vegarulez © (28.11.07 09:56) [22]
А ты в курсе, сколько это будет выполняться?
И чем неугодила SetWorldTransform? Зачем столько велосипедов?
← →
DmT (2007-12-01 15:42) [24]А что это?
← →
Denis__ © (2007-12-01 15:48) [25]
> @!!ex © (27.11.07 16:20) [12]
> > [10] DmT (27.11.07 15:47)
>
> 5 баксов
@!!ex, можно вопрос? А что ты по мелочам подрабатываешь(5,10 Баксов)? Наверняка же зарабатываешь хорошо на играх :)
← →
@!!ex © (2007-12-01 16:38) [26]> [25] Denis__ © (01.12.07 15:48)
Мне еще ни одного заказа на 5 баксов не дали. :)
Кому то бесплатно помогаю, кому то никак не помогаю.
А 5 баксов пишу для того, чтобы до авторов дошло, что их задачи бесплатно делать никто не нанимался, а то обычно "сделайте мне! не сделали? Да вы все лохи, зачем здесь сидите"
← →
Anatoly Podgoretsky © (2007-12-01 16:40) [27]> Denis__ (01.12.2007 15:48:25) [25]
Старушка 20 копеек, пять старушек рубль.
← →
antonn © (2007-12-01 23:09) [28]
> @!!ex © (01.12.07 16:38) [26]
Ага, типа того в Потрепаца один Живописец хотел :)
Кстати, зачастую "неподготовившись" перевести что 5 баксов, что 20 - однофигственно сложновато.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.05 c