Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли обрезать изображение??? [D7, WinXP]


Страницы:   1 2

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)  

Если владелец изображения не против, то можно.
Создаёшь новое изображение с желаемыми размерами и отрисовываешь на нём старое, сместив на нужное количество пикселей в право и вверх.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо