Текущий архив: 2008.08.10;
Скачать: CL | DM;
Вниз
Можно ли обрезать изображение??? Найти похожие ветки
← →
Zhentos (2008-07-08 09:23) [0]Предположим есть изображение, загруженное в компонент класса TImage, можно ли обрезать это изображение, по n пикселей с каждой из сторон, оставив центральную часть???
← →
Плохиш © (2008-07-08 10:12) [1]
> Zhentos (08.07.08 09:23)
Если владелец изображения не против, то можно.
Создаёшь новое изображение с желаемыми размерами и отрисовываешь на нём старое, сместив на нужное количество пикселей в право и вверх.
← →
Zhentos (2008-07-08 10:20) [2]ну допустим сдвинул влево и вверх, но ведь это не обрежет правый и нижний участки.
← →
Плохиш © (2008-07-08 10:25) [3]
> Zhentos (08.07.08 10:20) [2]
> ну допустим сдвинул влево и вверх, но ведь это не обрежет
> правый и нижний участки.
А те букавы, что стоят до "и", я для пушкина набивал?
← →
Zhentos (2008-07-08 10:25) [4]упс...
всё правильно...
← →
Zhentos (2008-07-08 10:26) [5]спасибо
← →
Тын-Дын © (2008-07-08 11:50) [6]Есть такой метод - CopyRect.
← →
Zhentos (2008-07-08 12:15) [7]2 Тын-Дын © (08.07.08 11:50) [6]
а как потом вставить скопированный прямоугольник?
← →
{RASkov} © (2008-07-08 12:25) [8]> [7] Zhentos (08.07.08 12:15)
Метод CopyRect переносит участок изображения с одного холста на другой
← →
Anatoly Podgoretsky © (2008-07-08 12:33) [9]> Zhentos (08.07.2008 12:15:07) [7]
Вставляй в позицию 0,0
← →
Zhentos (2008-07-08 12:33) [10]{RASkov} © (08.07.08 12:25) [8]
как быть, если нужно в пределах одного холста вырезать квадрат, из середины, и уменьшить холст до размеров квадрата?
← →
{RASkov} © (2008-07-08 12:49) [11]> если нужно в пределах одного холста вырезать квад
Так не выйдет, нужен "временный"(или конечный вариант) холст для хранения "куска" картинки...
← →
Zhentos (2008-07-08 13:00) [12]мда, просто у меня изображение практически на весь экран, и вырезаемый квадрат практически на весь экран (((
делаю так:
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;
но осталась проблема... из под вставленного квадрата "торчитат" остатки целого изображения.
← →
Zhentos (2008-07-08 13:15) [13]сорри, есть контакт...
просто stretch и Proportional было true.
← →
Zhentos (2008-07-08 13:22) [14]нет, нет контакта(((
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;
на экране только та область которая мне нужна, а сохраняет с фоном, краями изображения, из которого вырезался квадрат((( Как быть?
← →
{RASkov} © (2008-07-08 14:00) [15]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;
← →
Leonid Troyanovsky © (2008-07-08 15:12) [16]
> {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.
← →
Zhentos (2008-07-08 16:03) [17]начинаю путаться...
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???
← →
Zhentos (2008-07-08 16:10) [18]{RASkov} © (08.07.08 14:00) [15]
я так понял, что tmpbmp - это как раз временное изображние, в которое будет помещён копируемый участок... потом нужно будет сохранить это в файл, чтобы загрузить в TImage?
← →
Leonid Troyanovsky © (2008-07-08 16:11) [19]
> 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:30) [20]не мужики... мой качан варить отказался (((
я понял только смысл, но реализация отказала...
Нужно скопировать нужную мне область и поместить её во временный TBitmap, после чего присвоить моему компоненту TImage.Picture.Bitmap значение из временного.
как мне присвоить временному TBitmap_уImage1.Canvas.CopyRect(MyOther, Image1.Picture.Bitmap.Canvas, MyRect);
вот этот участок... в примере я не увидел этого(((
← →
Zhentos (2008-07-08 16:41) [21]
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;
что я делаю не так?
← →
{RASkov} © (2008-07-08 17:10) [22]> [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 17:10) [23]странно, думал задача не сложная(((
← →
{RASkov} © (2008-07-08 17:10) [24]> [23] Zhentos (08.07.08 17:10)
А в чем сложность-то? :)
← →
Zhentos (2008-07-08 17:20) [25]в том, что последний код, который вы прислали, вырезал участок и скопировал его в нулевые координаты, но ширина и высота Image1.Picture.Bitmap.Width(Height), не изменилась(((
а мне нужно чтобы вырезанный участок представлял цельную картинку, загруженную в Image1.Picture.Bitmap.
← →
{RASkov} © (2008-07-08 17:24) [26]> [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;
Ну что ты как маленький? :)
← →
{RASkov} © (2008-07-08 17:27) [27]> но ширина и высота Image1.Picture.Bitmap.Width(Height),
> не изменилась(((
Обманываешь.... не меняется размер компонента Image, а размер битмапа в коде вручную выставляется.... если ты не обратил внимания....
← →
Zhentos (2008-07-08 17:30) [28]
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.... сохраняется файл с наложенной на исходную картинку, областью копирования(((
← →
Zhentos (2008-07-08 17:34) [29]
> Обманываешь.... не меняется размер компонента Image, а размер
> битмапа в коде вручную выставляется.... если ты не обратил
> внимания....
да, и впрямь обманываю...
Спасибо за терпение и помощь!!!
← →
{RASkov} © (2008-07-08 17:45) [30]> [28] Zhentos (08.07.08 17:30)
> этот код делает всё, как будто бы верно, но при сохранении
> Image1.Picture.SaveToF.... сохраняется файл с наложенной
> на исходную картинку, областью копирования(((
См [26]
← →
{RASkov} © (2008-07-08 17:49) [31]> [28] Zhentos (08.07.08 17:30)
> См [26]
т.е. теперь ты "обрезал" размер компонента, а размер картинки оставил... Размеры выставляй как компоненту(для визуализации на форме) так и для картинки(чтоб убрать лишнее)...
← →
brother © (2008-07-09 07:02) [32]Можно ли обрезать изображение???
странно, думал задача не сложная(((
задумался... как то не стыкуется...
← →
Тын-Дын © (2008-07-09 11:40) [33]
> задумался... как то не стыкуется...
Что не стыкуется?
← →
brother © (2008-07-09 13:20) [34]> Можно ли обрезать изображение???
вопрос с вариантами ответа да или нет...
> думал задача не сложная(((
утверждение с заведомым да...
Либо спросил бы как сделать, либо сабж )))
← →
Тын-Дын © (2008-07-09 13:52) [35]Удалено модератором
← →
{RASkov} © (2008-07-09 13:57) [36]Удалено модератором
Страницы: 1 вся ветка
Текущий архив: 2008.08.10;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.006 c