Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 10:49   #1
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию Не могу найти ошибку

Код:
procedure TForm1.Button2Click(Sender: TObject);
var bmp: tbitmap;
Rct, rct1:TRect;
begin
bmp:=tbitmap.Create;

rct1:=rect(0,0,0,0);
rct:=rect(411,359,184,139);

bmp.Canvas.CopyRect(rct1,image1.Picture.Bitmap.Canvas,rct);
bmp.SaveToFile('c:\pic.bmp');
image2.Picture.LoadFromFile('c:\pic.bmp');
В Image1 картинка, из которой мне надо вырезать прямоугольник
Цитата:
(411,359,184,139)
, и поместить на image2. В коде где-то ошибка, прямоугольник остается пустой

Последний раз редактировалось T-dayne; 11.10.2010 в 11:19.
T-dayne вне форума Ответить с цитированием
Старый 11.10.2010, 11:30   #2
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

Во-первых, после создания TBitmap нужно задать ему размеры:
bmp.Width:=Image1.Width;
bmp.Height:=Image1.Height;

Во-вторых, размер прямоугольника rc1
Цитата:
rct1:=rect(0,0,0,0);
будет 0 пикселей, надо написать нужные значения
WhiteSpirit вне форума Ответить с цитированием
Старый 11.10.2010, 11:31   #3
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

будет 0 пикселей, надо написать нужные значения

как 0 ?
Я просто не хочу отступать ни с какой стороны пикселей, пусть будет во весть размер TImage
T-dayne вне форума Ответить с цитированием
Старый 11.10.2010, 11:33   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Без особых изысков работающий вариант.
Код:
procedure TForm1.Button2Click(Sender: TObject);
var bmp: tbitmap;
    Rct, rct1:TRect;
begin
  bmp:=tbitmap.Create;
  bmp.Height := 411-184;
  bmp.Width := 359-139;

  rct1 := rect(0,0, 411-184, 359-139);
  rct := rect(184, 139, 411, 359);

  bmp.Canvas.CopyRect(rct1, img1.Picture.Bitmap.Canvas, rct);
  image1.Picture.Bitmap.Assign(bmp);
  bmp.free;
end;
Более простой вариант.
Код:
procedure TForm1.Button2Click(Sender: TObject);
var 
    Rct, rct1:TRect;
begin
  rct1 := rect(0,0, 411-184, 359-139);
  rct := rect(184, 139, 411, 359);

  image2.Canvas.CopyRect(rct1, image1.Canvas, rct);
end;
Но при этом размер image2 должен быть по размеру вырезаемого прямоугольника.

Последний раз редактировалось Прик; 11.10.2010 в 12:07. Причина: Еще вариант
Прик вне форума Ответить с цитированием
Старый 11.10.2010, 11:51   #5
T-dayne
Пользователь
 
Аватар для T-dayne
 
Регистрация: 07.02.2010
Сообщений: 54
По умолчанию

Все получилось. Главная моя ошибка была в том, что в корне неправильно считал координаты. Пришлось открывать заного учебник)
Разобрался.
T-dayne вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу найти ошибку Berg_13 Помощь студентам 0 16.05.2010 21:53
не могу найти ошибку! novi4ok_Delphi Помощь студентам 4 24.04.2010 21:46
С++. не могу найти ошибку world12_tk Помощь студентам 3 25.07.2009 10:47
Не могу найти ошибку(С++) Yura_n Помощь студентам 8 20.01.2009 12:36
Не могу найти ошибку! Эдуард Общие вопросы C/C++ 7 27.02.2008 16:34