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

Вниз

Поворот и сдвиг картинки   Найти похожие ветки 

 
VasRog ©   (2003-12-11 21:42) [0]

Всем привет.
Как считать из файла картинку и повернуть ее на определенный угол и сдвинуть по осям координат. Т.е. проблема состоит в незнании процедур считывания пикселов, изменения их координат и последующей установки их на новое место.
И еще один вопросец. Если созданы несколько полей и необходимо программе считать  введенные пользователем данные из этих полей, а потом с ними работать, то вероятно нужно переводить их из строкового формата в целый. Если есть такие функции в Дельфи для перевода туда и обратно, то подскажите, плиз.


 
VasRog ©   (2003-12-11 21:42) [0]

Всем привет.
Как считать из файла картинку и повернуть ее на определенный угол и сдвинуть по осям координат. Т.е. проблема состоит в незнании процедур считывания пикселов, изменения их координат и последующей установки их на новое место.
И еще один вопросец. Если созданы несколько полей и необходимо программе считать  введенные пользователем данные из этих полей, а потом с ними работать, то вероятно нужно переводить их из строкового формата в целый. Если есть такие функции в Дельфи для перевода туда и обратно, то подскажите, плиз.


 
Deb ©   (2003-12-12 02:07) [1]

Canvas.Pixels[x,y]


 
Deb ©   (2003-12-12 02:07) [1]

Canvas.Pixels[x,y]


 
VasRog ©   (2003-12-12 16:07) [2]

Хочется сделать не через канву, а в TImag"е. Неужели никак нельзя?
И еще вопросик. Как сделать, чтобы при передвижении мышкой по картинке в TImag"е координаты местоположения курсора относительно картинки отображались бы рядом с курсором?


 
VasRog ©   (2003-12-12 16:07) [2]

Хочется сделать не через канву, а в TImag"е. Неужели никак нельзя?
И еще вопросик. Как сделать, чтобы при передвижении мышкой по картинке в TImag"е координаты местоположения курсора относительно картинки отображались бы рядом с курсором?


 
Agent13   (2003-12-12 16:23) [3]

>Хочется сделать не через канву, а в TImag"е.

Ну так и используй Image.Canvas.Pixels[x,y]

>нужно переводить их из строкового формата в целый.

StrToInt


 
Agent13   (2003-12-12 16:23) [3]

>Хочется сделать не через канву, а в TImag"е.

Ну так и используй Image.Canvas.Pixels[x,y]

>нужно переводить их из строкового формата в целый.

StrToInt


 
Amoeba ©   (2003-12-15 14:39) [4]

А не рановато ли тебе браться за такие задачи?


 
Amoeba ©   (2003-12-15 14:39) [4]

А не рановато ли тебе браться за такие задачи?


 
Ega23 ©   (2003-12-15 15:07) [5]


> И еще вопросик. Как сделать, чтобы при передвижении мышкой
> по картинке в TImag"е координаты местоположения курсора
> относительно картинки отображались бы рядом с курсором?

Событие OnMouseMove, функция GetMousePos, если мне память не изменяет.
Или даже лучше на OnIdle вешать.


 
Ega23 ©   (2003-12-15 15:07) [5]


> И еще вопросик. Как сделать, чтобы при передвижении мышкой
> по картинке в TImag"е координаты местоположения курсора
> относительно картинки отображались бы рядом с курсором?

Событие OnMouseMove, функция GetMousePos, если мне память не изменяет.
Или даже лучше на OnIdle вешать.


 
Alexest   (2003-12-15 15:10) [6]

вывод в заданное место - BitBlt или StretchBlt
const
 FScale = 0.5

var
DC: HDC;
BackImage: TBitmap;
begin
 BackImage := TBitmap.Create;
 BackImage.LoadFromFile(FileName);
 PanelDC := GetDC(Panel1.Handle);
 if BackImage <> nil then
   StretchBlt(PanelDC, 0, 0,
       Round(BackImage.Width*FScale), Round(BackImage.Height*FScale),
       BackImage.Canvas.Handle,       // handle to source DC
       BackImage.Canvas.ClipRect.TopLeft.X,  // x-coord of source upper-left corner
       BackImage.Canvas.ClipRect.TopLeft.Y,  // y-coord of source upper-left corner
       BackImage.Width, BackImage.Height, SRCCOPY);
 ReleaceDC(Panel1.Handle, PanelDC)
end;


поворот - PlgBlt
пример. BackImage - TBitmap;
procedure TPaintPanel.Rotation(const Angle: Double);
var
 P: array [0..2] of TPoint;
begin

по всем вопросам смотри Help или www.msdn.com
 p[0].X := 0; p[0].Y := 100; //координата лев. верх. точки оси
 p[1].X := 520; p[1].Y := 0; //координата прав. верх. точки оси
 p[2].X := 100; p[2].Y := 320;//координата ниж. левой точки оси
 PlgBlt(BackImage.Canvas.Handle, P, BackImage.Canvas.Handle,
        BackImage.Canvas.ClipRect.TopLeft.X,  // x-coord of source upper-left corner
        BackImage.Canvas.ClipRect.TopLeft.Y,  // y-coord of source upper-left corner
        BackImage.Width, BackImage.Height, 0, 0, 0);
end;


 
Alexest   (2003-12-15 15:10) [6]

вывод в заданное место - BitBlt или StretchBlt
const
 FScale = 0.5

var
DC: HDC;
BackImage: TBitmap;
begin
 BackImage := TBitmap.Create;
 BackImage.LoadFromFile(FileName);
 PanelDC := GetDC(Panel1.Handle);
 if BackImage <> nil then
   StretchBlt(PanelDC, 0, 0,
       Round(BackImage.Width*FScale), Round(BackImage.Height*FScale),
       BackImage.Canvas.Handle,       // handle to source DC
       BackImage.Canvas.ClipRect.TopLeft.X,  // x-coord of source upper-left corner
       BackImage.Canvas.ClipRect.TopLeft.Y,  // y-coord of source upper-left corner
       BackImage.Width, BackImage.Height, SRCCOPY);
 ReleaceDC(Panel1.Handle, PanelDC)
end;


поворот - PlgBlt
пример. BackImage - TBitmap;
procedure TPaintPanel.Rotation(const Angle: Double);
var
 P: array [0..2] of TPoint;
begin

по всем вопросам смотри Help или www.msdn.com
 p[0].X := 0; p[0].Y := 100; //координата лев. верх. точки оси
 p[1].X := 520; p[1].Y := 0; //координата прав. верх. точки оси
 p[2].X := 100; p[2].Y := 320;//координата ниж. левой точки оси
 PlgBlt(BackImage.Canvas.Handle, P, BackImage.Canvas.Handle,
        BackImage.Canvas.ClipRect.TopLeft.X,  // x-coord of source upper-left corner
        BackImage.Canvas.ClipRect.TopLeft.Y,  // y-coord of source upper-left corner
        BackImage.Width, BackImage.Height, 0, 0, 0);
end;


 
REA ©   (2003-12-15 15:22) [7]

PlgBlt
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Unsupported.


 
REA ©   (2003-12-15 15:22) [7]

PlgBlt
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Unsupported.


 
Amoeba ©   (2003-12-15 15:43) [8]

Что касается поворота картинки, то есть бесплатный компонент:
http://www.delphiarea.com/products/rotateimage/default.htm


 
Amoeba ©   (2003-12-15 15:43) [8]

Что касается поворота картинки, то есть бесплатный компонент:
http://www.delphiarea.com/products/rotateimage/default.htm


 
Dimka Maslov ©   (2003-12-15 16:30) [9]

http://delphibase.endimus.com/?action=viewfunc&topic=mediaimg&id=10186


 
Dimka Maslov ©   (2003-12-15 16:30) [9]

http://delphibase.endimus.com/?action=viewfunc&topic=mediaimg&id=10186


 
Calm ©   (2003-12-15 16:56) [10]

Что касаетс поворота, то можно почиатть про матрицы преобразований.


 
Calm ©   (2003-12-15 16:56) [10]

Что касаетс поворота, то можно почиатть про матрицы преобразований.


 
VasRog ©   (2003-12-19 11:35) [11]

Ну хорошо. С поворотом все более или менее ясно. А вот со сдвигом очень большие проблемы. Дело вот в чем: у меня есть картинка, загруженная в TImage. Теперь ее хочется сдвинуть по осям координат на определенную величину. Есть ли в Дельфи как бы буфер обмена т.е. чтобы я эту картинку считал с канвы и снова ее поместил с измененными координатами на нее же.


 
VasRog ©   (2003-12-19 11:35) [11]

Ну хорошо. С поворотом все более или менее ясно. А вот со сдвигом очень большие проблемы. Дело вот в чем: у меня есть картинка, загруженная в TImage. Теперь ее хочется сдвинуть по осям координат на определенную величину. Есть ли в Дельфи как бы буфер обмена т.е. чтобы я эту картинку считал с канвы и снова ее поместил с измененными координатами на нее же.


 
Ega23 ©   (2003-12-19 11:44) [12]

Создай виртуальный Bitmap, скопируй в него содержимое твоего Image через CopyRect, очисть Image, скопируй с Bitmap на Image с новыми координатами, убей битмап.
Только я бы порекомендовал TPaintBox использовать, когда сам рисуешь.


 
Ega23 ©   (2003-12-19 11:44) [12]

Создай виртуальный Bitmap, скопируй в него содержимое твоего Image через CopyRect, очисть Image, скопируй с Bitmap на Image с новыми координатами, убей битмап.
Только я бы порекомендовал TPaintBox использовать, когда сам рисуешь.


 
VasRog ©   (2003-12-19 19:56) [13]

Это то, что нужно!!! Но можно это в виде кода - хотя бы примерного, а то я совсем начинающий.


 
VasRog ©   (2003-12-19 19:56) [13]

Это то, что нужно!!! Но можно это в виде кода - хотя бы примерного, а то я совсем начинающий.


 
Тимохов ©   (2003-12-19 20:00) [14]

Значек "совсем начинающий" также как значек туфли на машине не освобождает от выполнения правил.
Правило первое и самое мощное - читай и напряги мозги.


 
Тимохов ©   (2003-12-19 20:00) [14]

Значек "совсем начинающий" также как значек туфли на машине не освобождает от выполнения правил.
Правило первое и самое мощное - читай и напряги мозги.


 
VasRog ©   (2003-12-19 23:51) [15]

OK. Тогда хотя бы процедуры(функции) напишите для всяких там "Создай виртуальный Bitmap","очисть Image","скопируй с Bitmap на Image с новыми координатами","убей битмап" чтобы знать, что в Help"е смотреть.
Особенно интересует "скопируй с Bitmap на Image с новыми координатами".

"не освобождает от выполнения правил" - а что у программистов естб кодекс: "Обломи ближнего своего"?


 
VasRog ©   (2003-12-19 23:51) [15]

OK. Тогда хотя бы процедуры(функции) напишите для всяких там "Создай виртуальный Bitmap","очисть Image","скопируй с Bitmap на Image с новыми координатами","убей битмап" чтобы знать, что в Help"е смотреть.
Особенно интересует "скопируй с Bitmap на Image с новыми координатами".

"не освобождает от выполнения правил" - а что у программистов естб кодекс: "Обломи ближнего своего"?


 
Нурик ©   (2003-12-20 06:54) [16]

Читайте книги по Аналитической геометрии: поворот, смещение координат


 
Нурик ©   (2003-12-20 06:54) [16]

Читайте книги по Аналитической геометрии: поворот, смещение координат


 
MAXIMUS   (2004-01-05 23:31) [17]

Слушай "VasRog", ты ещё не сделал своё маленькое открытие по теме перемещения BitMap? Могу помочь , если хочешь разумеется.
(((( Но книжки почитай всё-таки !!!!!!!!!!)))))))))))


 
MAXIMUS   (2004-01-05 23:31) [17]

Слушай "VasRog", ты ещё не сделал своё маленькое открытие по теме перемещения BitMap? Могу помочь , если хочешь разумеется.
(((( Но книжки почитай всё-таки !!!!!!!!!!)))))))))))


 
Ilya   (2004-01-06 18:12) [18]

procedure MyFirstDrawing;
var
 Bitmap: TBitmap;
 X, Y: Integer;
begin
 {Создание}
 Bitmap := TBitmap.Create;
 {Делаешь с ним, что тебе нужно}

 {Например загружаешь рисунок}
 Bitmap.LoadFromFile("Tank.bmp");

 {Устанавливаешь координаты рисования}
 X := 100;
 Y := 100;

 {рисуешь на Image}
 Image.Canvas.Draw(X, Y, Bitmap);

 {Заливаешь, т.е. стираешь прежний рисунок}
 Image.Canvas.FillRect(Image.ClientRect);

 {Меняешь координаты}
 X := X + 1;
 Y := Y + 1;
 
 {снова рисуешь на Image, только в другом месте}
 Image.Canvas.Draw(X, Y, Bitmap);
 

 {Другие процедуры смотри Help, ставь курсор на название
  процедуры и жми клавишу F1}
 
 Bitmap.Canvas.Pixels[X, Y];
 Bitmap.ScanLine(Row);
 Bitmap.Canvas.CopyRect(Rect1, Image.Canvas, Rect2);
 Bitmap.Canvas.Draw(X, Y, MyBitmap);
 

 {Обязательно удаляешь}
 {Удаляешь только тогда, когда он уже не нужен, а не после
  каждого рисования}
 Bitmap.Free;
end;
Обязательно купи хорошую книгу по Делфи иначе твои
программы будут неправильными.
На Хелпе далеко не уедешь.


 
Ilya   (2004-01-06 18:12) [18]

procedure MyFirstDrawing;
var
 Bitmap: TBitmap;
 X, Y: Integer;
begin
 {Создание}
 Bitmap := TBitmap.Create;
 {Делаешь с ним, что тебе нужно}

 {Например загружаешь рисунок}
 Bitmap.LoadFromFile("Tank.bmp");

 {Устанавливаешь координаты рисования}
 X := 100;
 Y := 100;

 {рисуешь на Image}
 Image.Canvas.Draw(X, Y, Bitmap);

 {Заливаешь, т.е. стираешь прежний рисунок}
 Image.Canvas.FillRect(Image.ClientRect);

 {Меняешь координаты}
 X := X + 1;
 Y := Y + 1;
 
 {снова рисуешь на Image, только в другом месте}
 Image.Canvas.Draw(X, Y, Bitmap);
 

 {Другие процедуры смотри Help, ставь курсор на название
  процедуры и жми клавишу F1}
 
 Bitmap.Canvas.Pixels[X, Y];
 Bitmap.ScanLine(Row);
 Bitmap.Canvas.CopyRect(Rect1, Image.Canvas, Rect2);
 Bitmap.Canvas.Draw(X, Y, MyBitmap);
 

 {Обязательно удаляешь}
 {Удаляешь только тогда, когда он уже не нужен, а не после
  каждого рисования}
 Bitmap.Free;
end;
Обязательно купи хорошую книгу по Делфи иначе твои
программы будут неправильными.
На Хелпе далеко не уедешь.


 
VasRog ©   (2004-02-12 10:50) [19]

Господа, помогите, пожалуйста, найти ошибку. Вот две функции из проги:
Эта функция осуществляет поворот картинки:

function RotateBitmap(Bitmap: TBitmap; Angle: Double; Color: TColor; Incx:word; Incy:word): TBitmap;
const
MaxPixelCount = 32768;
type
PRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[0..MaxPixelCount] of TRGBTriple;
var
A: Extended;
CosTheta: Extended;
SinTheta: Extended;
xSrc, ySrc: Integer;
xDst, yDst: Integer;
xODst, yODst: Integer;
xOSrc, yOSrc: Integer;
xPrime, yPrime: Integer;
srcRow, dstRow: PRGBTripleArray;
begin
Result := TBitmap.Create;
// Workaround SinCos bug
A := Angle;
while A >= 360 do A := A - 360;
while A < 0 do A := A + 360;
// end of workaround SinCos bug
SinCos(A * Pi / 180, SinTheta, CosTheta);
if (SinTheta * CosTheta) < 0 then
begin
  Result.Width := Round(Abs(Bitmap.Width * CosTheta - Bitmap.Height * SinTheta));
  Result.Height := Round(Abs(Bitmap.Width * SinTheta - Bitmap.Height * CosTheta));
end
else
begin
  Result.Width := Round(Abs(Bitmap.Width * CosTheta + Bitmap.Height * SinTheta));
  Result.Height := Round(Abs(Bitmap.Width * SinTheta + Bitmap.Height * CosTheta));
end;
with Result.Canvas do
begin
  Brush.Color := Color;
  Brush.Style := bsSolid;
  FillRect(ClipRect);
end;
Result.PixelFormat := pf24bit;
Bitmap.PixelFormat := pf24bit;
xODst := Result.Width div 2;
yODst := Result.Height div 2;
xOSrc := Bitmap.Width div 2;
yOSrc := Bitmap.Height div 2;
if CosTheta < 0 then Dec(xOSrc);
if SinTheta < 0 then Dec(yOSrc);
for ySrc := Max(Bitmap.Height, Result.Height)-1 downto 0 do
begin
  yPrime := ySrc - yODst;
  for xSrc := Max(Bitmap.Width, Result.Width)-1 downto 0 do
  begin
    xPrime := xSrc - xODst;
    xDst := Round(xPrime * CosTheta - yPrime * SinTheta) + xOSrc;
    yDst := Round(xPrime * SinTheta + yPrime * CosTheta) + yOSrc;
    if (yDst >= 0) and (yDst < Bitmap.Height) and
       (xDst >= 0) and (xDst < Bitmap.Width) and
       (ySrc >= 0) and (ySrc < Result.Height) and
       (xSrc >= 0) and (xSrc < Result.Width) then
    begin
      srcRow := Bitmap.ScanLine[yDst];
      dstRow := Result.Scanline[ySrc];
      dstRow[xSrc] := srcRow[xDst];
    end;
  end;
end;
end;

Эта процедура(точнее ее часть после except) сдвигает картинку по осям координат в зависимости от значений ползунков(TrackBar5 - ось ox и TrackBar6 - ось oy):

procedure TForm1.Button1Click(Sender: TObject);
var
p:TBitmap;
X,Y:word;
begin
p:=TBitmap.Create;
CopyMe(p,Image1.Picture.Graphic);
Contrast(p,TrackBar1.Position);
Darkness(p,TrackBar4.Position);
Lightness(p,TrackBar2.Position);
p:=RotateBitmap(p,TrackBar3.Position,Color,TrackBar5.Position,TrackBar6.Position);
try
Image2.Picture.Bitmap.FreeImage;
except; end;
X:=TrackBar5.Position;
Y:=TrackBar6.Position;
Image2.Picture.Bitmap.Assign(p);
Image2.Canvas.Brush.Color:=Color;
Form1.Image2.Canvas.Draw(X,Y,p);
Form1.Image2.Canvas.FillRect(Image2.ClientRect);
Form1.Image2.Canvas.Draw(X,Y,p);
p.Free;
end;

В результате получается,что чем больше двигаем ползунок(перемещаем картинку по любой оси), тем большая часть картинки "сьедается"(как будто уходит за край экрана).Заместо перемещения. :(


 
VasRog ©   (2004-02-12 10:50) [19]

Господа, помогите, пожалуйста, найти ошибку. Вот две функции из проги:
Эта функция осуществляет поворот картинки:

function RotateBitmap(Bitmap: TBitmap; Angle: Double; Color: TColor; Incx:word; Incy:word): TBitmap;
const
MaxPixelCount = 32768;
type
PRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[0..MaxPixelCount] of TRGBTriple;
var
A: Extended;
CosTheta: Extended;
SinTheta: Extended;
xSrc, ySrc: Integer;
xDst, yDst: Integer;
xODst, yODst: Integer;
xOSrc, yOSrc: Integer;
xPrime, yPrime: Integer;
srcRow, dstRow: PRGBTripleArray;
begin
Result := TBitmap.Create;
// Workaround SinCos bug
A := Angle;
while A >= 360 do A := A - 360;
while A < 0 do A := A + 360;
// end of workaround SinCos bug
SinCos(A * Pi / 180, SinTheta, CosTheta);
if (SinTheta * CosTheta) < 0 then
begin
  Result.Width := Round(Abs(Bitmap.Width * CosTheta - Bitmap.Height * SinTheta));
  Result.Height := Round(Abs(Bitmap.Width * SinTheta - Bitmap.Height * CosTheta));
end
else
begin
  Result.Width := Round(Abs(Bitmap.Width * CosTheta + Bitmap.Height * SinTheta));
  Result.Height := Round(Abs(Bitmap.Width * SinTheta + Bitmap.Height * CosTheta));
end;
with Result.Canvas do
begin
  Brush.Color := Color;
  Brush.Style := bsSolid;
  FillRect(ClipRect);
end;
Result.PixelFormat := pf24bit;
Bitmap.PixelFormat := pf24bit;
xODst := Result.Width div 2;
yODst := Result.Height div 2;
xOSrc := Bitmap.Width div 2;
yOSrc := Bitmap.Height div 2;
if CosTheta < 0 then Dec(xOSrc);
if SinTheta < 0 then Dec(yOSrc);
for ySrc := Max(Bitmap.Height, Result.Height)-1 downto 0 do
begin
  yPrime := ySrc - yODst;
  for xSrc := Max(Bitmap.Width, Result.Width)-1 downto 0 do
  begin
    xPrime := xSrc - xODst;
    xDst := Round(xPrime * CosTheta - yPrime * SinTheta) + xOSrc;
    yDst := Round(xPrime * SinTheta + yPrime * CosTheta) + yOSrc;
    if (yDst >= 0) and (yDst < Bitmap.Height) and
       (xDst >= 0) and (xDst < Bitmap.Width) and
       (ySrc >= 0) and (ySrc < Result.Height) and
       (xSrc >= 0) and (xSrc < Result.Width) then
    begin
      srcRow := Bitmap.ScanLine[yDst];
      dstRow := Result.Scanline[ySrc];
      dstRow[xSrc] := srcRow[xDst];
    end;
  end;
end;
end;

Эта процедура(точнее ее часть после except) сдвигает картинку по осям координат в зависимости от значений ползунков(TrackBar5 - ось ox и TrackBar6 - ось oy):

procedure TForm1.Button1Click(Sender: TObject);
var
p:TBitmap;
X,Y:word;
begin
p:=TBitmap.Create;
CopyMe(p,Image1.Picture.Graphic);
Contrast(p,TrackBar1.Position);
Darkness(p,TrackBar4.Position);
Lightness(p,TrackBar2.Position);
p:=RotateBitmap(p,TrackBar3.Position,Color,TrackBar5.Position,TrackBar6.Position);
try
Image2.Picture.Bitmap.FreeImage;
except; end;
X:=TrackBar5.Position;
Y:=TrackBar6.Position;
Image2.Picture.Bitmap.Assign(p);
Image2.Canvas.Brush.Color:=Color;
Form1.Image2.Canvas.Draw(X,Y,p);
Form1.Image2.Canvas.FillRect(Image2.ClientRect);
Form1.Image2.Canvas.Draw(X,Y,p);
p.Free;
end;

В результате получается,что чем больше двигаем ползунок(перемещаем картинку по любой оси), тем большая часть картинки "сьедается"(как будто уходит за край экрана).Заместо перемещения. :(



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

Форум: "Media";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.57 MB
Время: 0.043 c
7-1080132722
Nestee
2004-03-24 15:52
2004.05.09
Пароль на rar архив


1-1082304919
Makhanev A.S.
2004-04-18 20:15
2004.05.09
Странные глюки с TPageControl


1-1082709840
Дмитрий
2004-04-23 12:44
2004.05.09
Как вывести форму поверх главной без использования ShowModal?


3-1081943258
xloki
2004-04-14 15:47
2004.05.09
APACHE VS DELPHI!!


8-1076701704
Сережа
2004-02-13 22:48
2004.05.09
ImageList





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский