Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.06.2011, 12:49
Аватар для T-dayne
T-dayne T-dayne вне форума
Начинающий
 
Регистрация: 26.01.2010
Сообщения: 180
Репутация: 31
Восклицание Вырезать кусок из 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  
Старый 29.06.2011, 13:39
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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  
Старый 29.06.2011, 15:28
antikiler antikiler вне форума
Прохожий
 
Регистрация: 16.03.2011
Сообщения: 23
Репутация: 24
По умолчанию

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  
Старый 08.12.2011, 22:37
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Я вот немного не могу понять одного. В примерах все данные сохраняются в новое изображение. А если мне необходимо его использовать и загрузить в только что созданное изображение?
Как-то img.Picture.LoadFromFile(bmp); не хочет работать.
А в целом суть та же. Из предложенного изображения, вырезать часть и поместить на форму.
Ответить с цитированием
  #5  
Старый 08.12.2011, 22:47
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А при чём тут img.Picture.LoadFromFile?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 08.12.2011, 22:50
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
А при чём тут img.Picture.LoadFromFile?
не знаю, я экспериментировал. в том то и дело что не пойму какой командой его грузить.
Ответить с цитированием
  #7  
Старый 08.12.2011, 23:01
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Используй метод Assign.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 08.12.2011, 23:39
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

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  
Старый 08.12.2011, 23:43
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Все. Разобрался. Надо же еще форму указывать
ImgF.Parent:=Form1;
Ответить с цитированием
  #10  
Старый 08.12.2011, 23:54
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Всё работает:
Код:
  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 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:33.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter