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 пикселей с каждой из сторон, оставив центральную часть???


{RASkov}   (2008-07-09 13:57:00) [1]

Удалено модератором


Тын-Дын   (2008-07-09 13:52:00) [2]

Удалено модератором


brother   (2008-07-09 13:20:00) [3]

> Можно ли обрезать изображение???

вопрос с вариантами ответа да или нет...

> думал задача не сложная(((

утверждение с заведомым да...
Либо спросил бы как сделать, либо сабж )))


Тын-Дын   (2008-07-09 11:40:00) [4]


> задумался... как то не стыкуется...


Что не стыкуется?


brother   (2008-07-09 07:02:00) [5]

Можно лиобрезать изображение???
странно, думал задача не сложная(((
задумался... как то не стыкуется...


{RASkov}   (2008-07-08 17:49:00) [6]

> [28] Zhentos   (08.07.08 17:30)

> См [26]

т.е. теперь ты "обрезал" размер компонента, а размер картинки оставил... Размеры выставляй как компоненту(для визуализации на форме) так и для картинки(чтоб убрать лишнее)...


{RASkov}   (2008-07-08 17:45:00) [7]

> [28] Zhentos   (08.07.08 17:30)
> этот код делает всё, как будто бы верно, но при сохранении
> Image1.Picture.SaveToF.... сохраняется файл с наложенной
> на исходную картинку, областью копирования(((

См [26]


Zhentos   (2008-07-08 17:34:00) [8]


> Обманываешь.... не меняется размер компонента Image, а размер
> битмапа в коде вручную выставляется.... если ты не обратил
> внимания....


да, и впрямь обманываю...

Спасибо за терпение и помощь!!!


Zhentos   (2008-07-08 17:30:00) [9]

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; //
Image1.Width := Shape1.Width;
Image1.Height := Shape1.Height;
end;


этот код делает всё, как будто бы верно, но при сохранении Image1.Picture.SaveToF.... сохраняется файл с наложенной на исходную картинку, областью копирования(((


{RASkov}   (2008-07-08 17:27:00) [10]

> но ширина и высота Image1.Picture.Bitmap.Width(Height),
> не изменилась(((

Обманываешь.... не меняется размер компонента Image, а размер битмапа в коде вручную выставляется.... если ты не обратил внимания....


{RASkov}   (2008-07-08 17:24:00) [11]

> [25] Zhentos   (08.07.08 17:20)

У Image1 AutoSize чему равен у тебя?
Код в [22] выполняется с AutoSize=True, иначе делай так:
Image1.Picture.Bitmap.Width:=R.Right-R.Left;
Image1.Picture.Bitmap.Height:=R.Bottom-R.Top;
Image1.Width:=R.Right-R.Left;
Image1.Height:=R.Bottom-R.Top;

Ну что ты как маленький? :)


Zhentos   (2008-07-08 17:20:00) [12]

в том, что последний код, который вы прислали, вырезал участок и скопировал его в нулевые координаты, но ширина и высота Image1.Picture.Bitmap.Width(Height), не изменилась(((

а мне нужно чтобы вырезанный участок представлял цельную картинку, загруженную в Image1.Picture.Bitmap.


{RASkov}   (2008-07-08 17:10:00) [13]

> [23] Zhentos   (08.07.08 17:10)

А в чем сложность-то? :)


Zhentos   (2008-07-08 17:10:00) [14]

странно, думал задача не сложная(((


{RASkov}   (2008-07-08 17:10:00) [15]

> [21] Zhentos   (08.07.08 16:41)

var R, R1: TRect;
begin
 R:=Rect(140, 100, 255, 155); //Этот участок "вырезаем"
 R1:=Rect(0, 0, R.Right-R.Left, R.Bottom-R.Top);
 Image1.Canvas.CopyRect(R1, Image1.Canvas, R);
 Image1.Picture.Bitmap.Width:=R.Right-R.Left;
 Image1.Picture.Bitmap.Height:=R.Bottom-R.Top;
end;



> что я делаю не так?

А ты с размерами области R ничего не перемудрил? И почитай что делает InflateRect - наверняка это не для тебя, а я просто для примера вставлял его....


Zhentos   (2008-07-08 16:41:00) [16]

var TmpBmp: TBitmap; R: Trect;
begin
tmpbmp:=tbitmap.create;
R := Rect(0, 0, Image1.width, Image1.height);
inflaterect(R, Shape1.Width - Image1.Width, Shape1.Height - Image1.Height);
tmpbmp.width := Shape1.Width;
tmpbmp.height := Shape1.Height;
// tmpbmp.canvas.copyrect(R, Bmp.canvas, R);
with tmpbmp.canvas do copyrect(ClipRect, Image1.canvas, R);
Image1.Picture.Bitmap :=  tmpbmp;

end;

что я делаю не так?


Zhentos   (2008-07-08 16:30:00) [17]

не мужики... мой качан варить отказался (((

я понял только смысл, но реализация отказала...
Нужно скопировать нужную мне область и поместить её во временный TBitmap, после чего присвоить моему компоненту TImage.Picture.Bitmap значение из временного.

как мне присвоить временному TBitmap_у Image1.Canvas.CopyRect(MyOther, Image1.Picture.Bitmap.Canvas, MyRect);вот этот участок... в примере я не увидел этого(((


Leonid Troyanovsky   (2008-07-08 16:11:00) [18]


> Zhentos   (08.07.08 16:03) [17]

> начинаю путаться...

Возьми за основу [15].
Вместо bmp (.loadfromfile) у тебя есть Image1.Picture.Bitmap.
После всех пассов сделай Image1.Picture.Bitmap :=  tmpbmp

Только Free не надо ;)

--
Regards, LVT.


Zhentos   (2008-07-08 16:10:00) [19]

{RASkov} ©   (08.07.08 14:00) [15]
я так понял, что tmpbmp - это как раз временное изображние, в которое будет помещён копируемый участок... потом нужно будет сохранить это в файл, чтобы загрузить в TImage?


Zhentos   (2008-07-08 16:03:00) [20]

начинаю путаться...

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);
Image1.Proportional := false;
Image1.Stretch := false;
Image1.Width := Shape1.Width;
Image1.Height := Shape1.Height;
end;


этот код копирует квадрат из изображения загруженного в TImage и ставит его в нулевую позицию и по иксу и по игрику. Как "откусить" лишние части именно на этом холсте TImage??? Как мне продолжить работу с изображением загруженным в TImage???


Страницы:   1 2

Наверх

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