Форум: "Начинающим";
Текущий архив: 2011.02.20;
Скачать: [xml.tar.bz2];
ВнизКак обрезать Image в Delphi 7? Найти похожие ветки
← →
Анонимус (2010-11-25 18:49) [0]Дана картинка Image1 с разрешением, например 200х200. Каким образом её можно обрезать до разрешения 100х100?
Пробовал, например, задавать
Image1.Picture.Width:=100;
так он пишет об ошибке.
Искал во всяких другиз Image1.Picture - но тоже ничего похожего не нашёл.
← →
clickmaker © (2010-11-25 18:50) [1]обрезать с масштабированием? TImage.Stretch тогда
← →
Анонимус (2010-11-25 18:53) [2]
> обрезать с масштабированием? TImage.Stretch тогда
Нет, без него.
Нужно как раз отрезать лишнее.
← →
clickmaker © (2010-11-25 19:52) [3]значит, без Stretch. Image.Width :=
← →
Анонимус (2010-11-25 21:56) [4]
> Image.Width :=
Не знаю почему, но почему-то не получается. Может там надо в свойствах объекта поменять?
← →
Анонимус (2010-11-25 21:57) [5]
> Может там надо в свойствах объекта поменять?
*что-то поменять
← →
ghostdelvonte@mail.ru (2010-11-25 22:01) [6]ARect: TRect;
.....
ARect:= Rect(0, 0, 100, 100);
with Bitmap.Canvas do
CopyRect(Bitmap.Canvas.ClipRect, Bitmap.Canvas, ARect);
← →
ghostdelvonte@mail.ru (2010-11-25 22:03) [7]Что-то типа этого, я так делал
← →
Анонимус (2010-11-25 22:08) [8]
> with Bitmap.Canvas do
Вот на этой строчке ставит курсор после Canvas и выдаёт ошибку
[Error] Unit1.pas(1139): Object or class type required
На следующей строчке то же самое. Насколько я понял, тут нужно как-то ему указать Image1?
← →
ghostdelvonte@mail.ru (2010-11-25 22:12) [9]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);
************************************************
← →
ghostdelvonte@mail.ru (2010-11-25 22:14) [10]А потом битмат копируй в имейдж и удаляй битмап
← →
Анонимус (2010-11-25 22:21) [11]ghostdelvonte@mail.ru
Ничего не происходит.
На всякий случай уточните, как надо копировать? Может я не так копирую.
← →
ghostdelvonte@mail.ru (2010-11-25 22:27) [12]Если у тебя в имейдже загружен рисунок не битмап формата то, сначала надо либо преобразовать его в битмап или связать с имейджем канву
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:45) [13]ghostdelvonte@mail.ru
Да, всё работает. Большое спасибо за помощь!
И ещё вопрос так, из любопытства: зачем в конце битмап удалять?
← →
ghostdelvonte@mail.ru (2010-11-25 22:49) [14]При создании битмапа - резервируется под него память, если не удалить битмап - память не вернется в кучу!
← →
Анонимус (2010-11-25 22:54) [15]
> память не вернется в кучу!
А какими последствиями это грозит?=)
← →
clickmaker © (2010-11-25 23:03) [16]> А какими последствиями это грозит?=)
куча обидится и больше не даст
← →
ghostdelvonte@mail.ru (2010-11-25 23:03) [17]Попробуй это и узнаешь:
var
Bitmap: array[1..1000000] of TBitmap;
X: Integer;
begin
for X:= 1 to 1000000 do
begin
Bitmap[X]:= TBitmap.Create;
Bitmap[X].Width := 1024;
Bitmap[X].Height:= 768;
end;
← →
Анонимус (2010-11-25 23:10) [18]
> куча обидится и больше не даст
Да, пожалуй это и правда будет не слишком-то хорошо, если она так сделает.
> Попробуй это и узнаешь:
Что-то меня не тянет пробовать такие опасно выглядящие вещи=)
Ладно, ещё раз спасибо за помощь, пойду дальше прогу ковырять.
← →
Inovet © (2010-11-25 23:13) [19]> [15] Анонимус (25.11.10 22:54)
> А какими последствиями это грозит?=)
Память будет выделяться при каждом вызове этой процедуры, а возвращаться системе не будет. И так пока не закончится вся или пока система сама не вернёт при завершении приложения.
Это не то что вопросов вызывать не должно, а должно писаться на автомате - выделил память/создал объект, как только закончил с ней/с ним работать, освободи. И обязательно это надо брать в блок try finally
Bitmap:= TBitmap.Create;
try
// что-то делаем
finally
Bitmap.Free;
end;
← →
Ghost del vonte © (2010-11-25 23:19) [20]>>Inovet © (25.11.10 23:13) [19]
Вот-вот!
← →
Анонимус (2010-11-26 00:05) [21]
> И обязательно это надо брать в блок try finally
Даже так?
Inovet, спасибо за инфу, буду знать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.02.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c