![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли обрезать изображение??? [D7, WinXP]
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???