![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
всем привет. Есть bmp картинка на диске, нужно вырезать из нее прямоугольник координатами (225, 543, 352, 582), и вставить в новый tbitmap. Знаю что это можно сделать с функцией copyrect, но не знаю как пользоваться. Научите, друзья
![]() Вот что делаю я: Код:
bmp:=tbitmap.Create;
bit:=tbitmap.Create;
JPEG := TJPEGImage.Create;
JPEG.LoadFromFile('c:\first_image.jpg');
Bmp.Assign(JPEG); // картинка теперь в bmp
q := Rect(225, 543, 352, 582);
w := Rect(0, 0, 0, 0);
bit.Canvas.CopyRect(w, bmp.Canvas, q);В итоге bit пустой ![]() |
|
#2
|
||||
|
||||
|
Код:
const
x1=225;
y1=543;
x2=352;
y2=582;
var
bmpin: TBitmap;
bmpout: TBitmap;
begin
bmpin:=TBitmap.Create;
bmpout:=TBitmap.Create;
try
bmpin.LoadFromFile('g:\__Data\D2007.bmp');
bmpout.Width:=x2-x1+1;
bmpout.Height:=y2-y1+1;
bmpout.Canvas.CopyRect(Rect(0, 0, bmpout.Width, bmpout.Height), bmpin.Canvas, Rect(x1, y1, x2, y2));
bmpout.SaveToFile('g:\__Data\D2007_.bmp');
finally
bmpout.Free;
bmpin.Free;
end;
end; |
|
#3
|
|||
|
|||
|
T-dayne
В твоем коде практически все правильно. Кроме данного параметра w := Rect(0, 0, 0, 0); Даный параметр указывает начальную и конечную точку области в которую будет занесена картинка. И обе эти точки равны т.е. размер картинки нулевой - поэтому ее невидно. Сделай так: w := Rect(0, 0, 352-255, 582-543); Второе Перед тем как копировать картинку, нужно установить изначально размер(высоту и ширину) bit, bit.Width:=352-255; //ширина bit.Height:=582-543; //высота Треье Следить чтобы кусок который ты хочеш вырезать был диапозоне размера картинки. Например если размер картинки 400 х 300, то в твоем случае ничего путного не выйдет. Ну и наконец подведем итог Код:
bmp:=tbitmap.Create;
bit:=tbitmap.Create;
JPEG := TJPEGImage.Create;
JPEG.LoadFromFile('c:\first_image.jpg');
Bmp.Assign(JPEG); // картинка теперь в bmp
q := Rect(225, 543, 352, 582);
w := Rect(0, 0, 352-255, 582-543);
bit.Width:=352-255; //ширина
bit.Height:=582-543; //высота
bit.Canvas.CopyRect(w, bmp.Canvas, q);
bit.savetofile('c:\first_image_1.bmp')
jpeg.free;
bmp.Free;
bit.Free; |
|
#4
|
|||
|
|||
|
Я вот немного не могу понять одного. В примерах все данные сохраняются в новое изображение. А если мне необходимо его использовать и загрузить в только что созданное изображение?
Как-то img.Picture.LoadFromFile(bmp); не хочет работать. А в целом суть та же. Из предложенного изображения, вырезать часть и поместить на форму. |
|
#5
|
||||
|
||||
|
А при чём тут img.Picture.LoadFromFile?
|
|
#6
|
|||
|
|||
|
Цитата:
не знаю, я экспериментировал. в том то и дело что не пойму какой командой его грузить. |
|
#7
|
||||
|
||||
|
Используй метод Assign.
|
|
#8
|
|||
|
|||
|
var
BmpI: TBitmap; BmpT: TBitmap; ImgF: TImage; begin BmpI:=TBitmap.Create; BmpT:=TBitmap.Create; ImgF:=TImage.Create(nil); BmpI.LoadFromFile('Image.bmp'); BmpT.Width:=32; BmpT.Height:=32; BmpT.Canvas.CopyRect(Rect(0, 0, 32, 32), BmpI.Canvas, Rect(0, 0, 32, 32)); ImgF.Picture.Assign(BmpT); // так работает, но не показывает изображение ImgF.Assign(BmpT); // если так - ошибка |
|
#9
|
|||
|
|||
|
Все. Разобрался. Надо же еще форму указывать
ImgF.Parent:=Form1; |
|
#10
|
||||
|
||||
|
Всё работает:
Код:
BmpI: TBitmap;
BmpT: TBitmap;
ImgF: TImage;
begin
BmpI := TBitmap.Create;
BmpT := TBitmap.Create;
ImgF := TImage.Create(nil);
ImgF.Parent := Form1;
BmpI.LoadFromFile('..\000.bmp');
BmpT.Width := BmpI.Width;
BmpT.Height := BmpI.Height;
BmpT.Canvas.CopyRect(Rect(0, 0, 32, 32), BmpI.Canvas, Rect(0, 0, 32, 32));
ImgF.Picture.Assign(BmpT); // так работает, но не показывает изображение
// ImgF.Assign(BmpT); // если так - ошибка![]() |