Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обрезать Image в Delphi 7?


Страницы:   1 2

Анонимус ©   (2010-11-25 18:49:00) 

Дана картинка Image1 с разрешением, например 200х200. Каким образом её можно обрезать до разрешения 100х100?
Пробовал, например, задавать
Image1.Picture.Width:=100;
так он пишет об ошибке.
Искал во всяких другиз Image1.Picture - но тоже ничего похожего не нашёл.


Анонимус   (2010-11-26 00:05:00) [1]


> И обязательно это надо брать в блок try finally

Даже так?
Inovet, спасибо за инфу, буду знать.


Ghost del vonte   (2010-11-25 23:19:00) [2]

>>Inovet ©   (25.11.10 23:13) [19]

Вот-вот!


Inovet   (2010-11-25 23:13:00) [3]

> [15] Анонимус   (25.11.10 22:54)
> А какими последствиями это грозит?=)

Память будет выделяться при каждом вызове этой процедуры, а возвращаться системе не будет. И так пока не закончится вся или пока система сама не вернёт при завершении приложения.

Это не то что вопросов вызывать не должно, а должно  писаться на автомате - выделил память/создал объект, как только закончил с ней/с ним работать, освободи. И обязательно это надо брать в блок try finally

Bitmap:= TBitmap.Create;
try
 // что-то делаем
finally
 Bitmap.Free;
end;


Анонимус   (2010-11-25 23:10:00) [4]


> куча обидится и больше не даст

Да, пожалуй это и правда будет не слишком-то хорошо, если она так сделает.


> Попробуй это и узнаешь:

Что-то меня не тянет пробовать такие опасно выглядящие вещи=)
Ладно, ещё раз спасибо за помощь, пойду дальше прогу ковырять.


ghostdelvonte@mail.ru   (2010-11-25 23:03:00) [5]

Попробуй это и узнаешь:

var
Bitmap: array[1..1000000] of TBitmap;
X: Integer;
begin
forX:= 1 to1000000 do
begin
  Bitmap[X]:= TBitmap.Create;
  Bitmap[X].Width := 1024;
  Bitmap[X].Height:= 768;
end;


clickmaker   (2010-11-25 23:03:00) [6]

> А какими последствиями это грозит?=)

куча обидится и больше не даст


Анонимус   (2010-11-25 22:54:00) [7]


> память не вернется в кучу!

А какими последствиями это грозит?=)


ghostdelvonte@mail.ru   (2010-11-25 22:49:00) [8]

При создании битмапа - резервируется под него память, если не удалить битмап - память не вернется в кучу!


Анонимус   (2010-11-25 22:45:00) [9]

ghostdelvonte@mail.ru
Да, всё работает. Большое спасибо за помощь!

И ещё вопрос так, из любопытства: зачем в конце битмап удалять?


ghostdelvonte@mail.ru   (2010-11-25 22:27:00) [10]

Если у тебя в имейдже загружен рисунок не битмап формата то, сначала надо либо преобразовать его в битмап или связать с имейджем канву

ARect: TRect;
Bitmap: TBitmap;
DCanvas: TControlCanvas;

.....

ARect:= Rect(0, 0, 100, 100);
Bitmap:= TBitmap.Create;
Bitmap.Width:= 100;
Bitmap.Height:= 100;
DCanvas:= TControlCanvas.Create;
DCanvas.Control:= Image1;

with Bitmap.Canvas do
     CopyRect(Bitmap.Canvas.ClipRect, DCanvas, ARect);
Image1.Picture.Assign(Bitmap);
DCanvas.Free;
Bitmap.Free;

**********************************************
Я таким образом копировал нужные мне участки на изображении!


Анонимус   (2010-11-25 22:21:00) [11]

ghostdelvonte@mail.ru
Ничего не происходит.
На всякий случай уточните, как надо копировать? Может я не так копирую.


ghostdelvonte@mail.ru   (2010-11-25 22:14:00) [12]

А потом битмат копируй в имейдж и удаляй битмап


ghostdelvonte@mail.ru   (2010-11-25 22:12:00) [13]

ARect: TRect;
Bitmap: TBitmap;

.....

ARect:= Rect(0, 0, 100, 100);
Bitmap:= TBitmap.Create;
Bitmap.Width:= 100;
Bitmap.Height:= 100;
with Bitmap.Canvas do
     CopyRect(Bitmap.Canvas.ClipRect, Image1.Canvas, ARect);

************************************************


Анонимус   (2010-11-25 22:08:00) [14]


> with Bitmap.Canvas do

Вот на этой строчке ставит курсор после Canvas и выдаёт ошибку
[Error] Unit1.pas(1139): Object or class type required

На следующей строчке то же самое. Насколько я понял, тут нужно как-то ему указать Image1?


ghostdelvonte@mail.ru   (2010-11-25 22:03:00) [15]

Что-то типа этого, я так делал


ghostdelvonte@mail.ru   (2010-11-25 22:01:00) [16]

ARect: TRect;

.....

ARect:= Rect(0, 0, 100, 100);
with Bitmap.Canvas do
      CopyRect(Bitmap.Canvas.ClipRect, Bitmap.Canvas, ARect);


Анонимус   (2010-11-25 21:57:00) [17]


>  Может там надо в свойствах объекта поменять?

*что-то поменять


Анонимус   (2010-11-25 21:56:00) [18]


> Image.Width :=

Не знаю почему, но почему-то не получается. Может там надо в свойствах объекта поменять?


clickmaker   (2010-11-25 19:52:00) [19]

значит, без Stretch. Image.Width :=


Анонимус   (2010-11-25 18:53:00) [20]


> обрезать с масштабированием? TImage.Stretch тогда

Нет, без него.
Нужно как раз отрезать лишнее.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо