![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Цитата:
не знаю, я экспериментировал. в том то и дело что не пойму какой командой его грузить. |