|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Вырезать кусок из bmp
всем привет. Есть 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?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
|||
|
|||
Цитата:
|
#7
|
||||
|
||||
Используй метод Assign.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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); // если так - ошибка Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |