![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли обрезать изображение??? [D7, WinXP]
Zhentos © (2008-07-08 09:23:00)Предположим есть изображение, загруженное в компонент класса TImage, можно ли обрезать это изображение, по n пикселей с каждой из сторон, оставив центральную часть???
Leonid Troyanovsky (2008-07-08 15:12:00) [21]
> {RASkov} © (08.07.08 14:00) [15]
> tmpbmp.canvas.copyrect(R, Bmp.canvas, R);
with tmpbmp.canvas do copyrect(ClipRect, Bmp.canvas, R);
--
Regards, LVT.
{RASkov} (2008-07-08 14:00:00) [22]var Bmp, TmpBmp: TBitmap; R: Trect;
begin
BMp:=TBitmap.Create;
tmpbmp:=tbitmap.create;
bmp.loadfromfile();
R:=Rect(0, 0, bmp.width, bmp.height);
inflaterect(R, -20, -20);
tmpbmp.width:=R.Right-R.Left;
tmpbmp.height:=R.bottom-R.top;
tmpbmp.canvas.copyrect(R, Bmp.canvas, R);
tmpbmp.savetofile();
bmp.free;
tmpbmp.free;
end;
Zhentos (2008-07-08 13:22:00) [23]нет, нет контакта(((
var
MyRect, MyOther: TRect;
begin
MyRect := Rect(Shape1.Left, Shape1.Top, Shape1.Left + Shape1.Width, Shape1.Top + Shape1.Height);
MyOther := Rect(0, 0, Shape1.Width, Shape1.Height);
Image1.Canvas.CopyRect(MyOther, Image1.Picture.Bitmap.Canvas, MyRect);
Shape1.Left := 0;
Shape1.Top := 0;
Image1.Proportional := false;
Image1.Stretch := false;
Image1.Width := Shape1.Width;
Image1.Height := Shape1.Height;
Image1.Picture.SaveToFile(ExtractFilePath(paramstr(0)) + 'Picture.bmp');
end;
на экране только та область которая мне нужна, а сохраняет с фоном, краями изображения, из которого вырезался квадрат((( Как быть?
Zhentos (2008-07-08 13:15:00) [24]сорри, есть контакт...
просто stretch и Proportional было true.
Zhentos (2008-07-08 13:00:00) [25]мда, просто у меня изображение практически на весь экран, и вырезаемый квадрат практически на весь экран (((
делаю так:
var
MyRect, MyOther: TRect;
begin
MyRect := Rect(Shape1.Left, Shape1.Top, Shape1.Left + Shape1.Width, Shape1.Top + Shape1.Height);
MyOther := Rect(0, 0, Shape1.Width, Shape1.Height);
Image1.Canvas.CopyRect(MyOther, Image1.Canvas, MyRect);
Shape1.Left := 0;
Shape1.Top := 0;
end;
но осталась проблема... из под вставленного квадрата "торчитат" остатки целого изображения.
{RASkov} (2008-07-08 12:49:00) [26]> если нужно в пределах одного холста вырезать квад
Так не выйдет, нужен "временный"(или конечный вариант) холст для хранения "куска" картинки...
Zhentos (2008-07-08 12:33:00) [27]{RASkov} © (08.07.08 12:25) [8]
как быть, если нужно в пределах одного холста вырезать квадрат, из середины, и уменьшить холст до размеров квадрата?
Anatoly Podgoretsky (2008-07-08 12:33:00) [28]> Zhentos (08.07.2008 12:15:07) [7]
Вставляй в позицию 0,0
{RASkov} (2008-07-08 12:25:00) [29]> [7] Zhentos (08.07.08 12:15)
Метод CopyRect переносит участок изображения с одного холста на другой
Zhentos (2008-07-08 12:15:00) [30]2 Тын-Дын © (08.07.08 11:50) [6]
а как потом вставить скопированный прямоугольник?
Тын-Дын (2008-07-08 11:50:00) [31]Есть такой метод - CopyRect.
Zhentos (2008-07-08 10:26:00) [32]спасибо
Zhentos (2008-07-08 10:25:00) [33]упс...
всё правильно...
Плохиш (2008-07-08 10:25:00) [34]
> Zhentos (08.07.08 10:20) [2]
> ну допустим сдвинул влево и вверх, но ведь это не обрежет
> правый и нижний участки.
А те букавы, что стоят до "и", я для пушкина набивал?
Zhentos (2008-07-08 10:20:00) [35]ну допустим сдвинул влево и вверх, но ведь это не обрежет правый и нижний участки.
Плохиш (2008-07-08 10:12:00) [36]
> Zhentos (08.07.08 09:23)
Если владелец изображения не против, то можно.
Создаёшь новое изображение с желаемыми размерами и отрисовываешь на нём старое, сместив на нужное количество пикселей в право и вверх.