![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Bmp -->JPG
ser_ega © (2004-11-05 23:14:00)Мастера помогите! Как такой код
Bmp := TBitMap.Create;
try
ARect := Rect(701,776,766,806);
with Bmp, Arect do begin
Height :=Bottom - Top;
Width :=Right-Left;
Canvas.CopyRect(Rect(0,0,Width,Height), Image1.Canvas, ARect);
end;
Bmp.SaveToFile('c:\copyrect.bmp');
finally
Bmp.Free;
end;
переделать так чтобы, выделенный фрагмент сохранялся в JPG?
Mihey_temporary (2004-11-07 19:47:00) [1]Очистить можно так:
Image.Picture.Graphic := nil;
При этом TImage сам освобождает память (нет потери указателей, как может показаться). Это легко проверить:
var Gr: TGraphic;
Gr := Image.Picture.Graphic;
Image.Picture.Graphic := nil;
Gr.Free; // <- вызовет ошибку, т.к. Gr уже освобождён
ser_ega (2004-11-07 18:11:00) [2]Большое Вам спасибо! Может вы мне еще подскажите как очистить Image от картинки, а то при попытке закрыть форму выскакивает окно "Процессор". Я думаю это потому что в Image картинка большого размера (2500 Х 3500). А уменьшать его не хочется т.к. уменьшится и нужный мне фрагмент. Может вы посоветуете более рациональный способ! Еще раз СПАСИБО!
Mihey_temporary (2004-11-07 17:43:00) [3]Кусок кода:
procedure TmainForm.btnSaveClick(Sender: TObject);
procedure SetBitmapSize(var ABitmap: TBitmap;
Width, Height: Integer);
begin
ABitmap.Width := Width;
ABitmap.Height := Height;
end;
var
InternalBitmap: TBitmap;
TheOneToSave: TBitmap;
jp: TJPEGImage;
ARect: TRect;
begin
ARect := Rect(StrToInt(edLeft.Text), StrToInt(edTop.Text),
StrToInt(edRight.Text), StrToInt(edBottom.Text));
If Image.Picture.Graphic <> nil then
begin
TheOneToSave := TBitmap.Create;
SetBitmapSize(TheOneToSave, ARect.Right-ARect.Left,
ARect.Bottom-ARect.Top);
try
InternalBitmap := TBitmap.Create;
try
SetBitmapSize(InternalBitmap, Image.Picture.Graphic.Width,
Image.Picture.Graphic.Height);
InternalBitmap.Canvas.Draw(0, 0, Image.Picture.Graphic);
TheOneToSave.Canvas.CopyRect(Rect(0, 0, TheOneToSave.Width,
TheOneToSave.Height), InternalBitmap.Canvas, ARect);
finally
InternalBitmap.Free;
end;
// Saving JPEG...
jp := TJpegImage.Create;
try
with jp do
begin
Assign(TheOneToSave);
SaveToFile('temp1.jpg');
end;
finally
jp.Free;
end;
finally
TheOneToSave.Free;
end;
end
else
begin
MessageDlg('No image loaded!', mtError, [mbOk], 0);
end;
end;
И готовый архив:
http://www.hot.ee/mvps19/JpegWork.rar [242 Kb]
ser_ega (2004-11-07 12:13:00) [4]Подскажите может другое решение моей проблемы найдется! Я Вас очень прошу!
ser_ega (2004-11-06 23:39:00) [5]Mihey_temporary Ваш пример тоже выдает ту же ошибку!
Что такое SomeSource? У меня в Image1 находится JPG. Прикол в том что если я В Image1 загружаю Bmp то все работает, а вот с Jpg проблемки!
Mihey_temporary (2004-11-06 23:00:00) [6]Подключай воображение. Примерно так:
var
jp: TJpegImage;
begin
Bmp := TBitMap.Create;
jp := TJpegImage.Create;
try
ARect := Rect(701,776,766,806);
with Bmp, Arect do
begin
Height := Bottom - Top;
Width := Right-Left;
Canvas.CopyRect(Rect(0,0,Width,Height), SomeSource.Canvas, ARect);
end;
with jp do
begin
Assign(Bmp);
SaveToFile('c:\oneeye.jpg')
end;
finally
jp.Free;
Bmp.Free;
end;
ser_ega (2004-11-06 22:52:00) [7]Удалено модератором
ser_ega (2004-11-06 17:52:00) [8]Я его переделал так:
Bmp := TJpegImage.Create;
try
ARect := Rect(50,50,100,100);
with Arect do begin
Height :=Bottom - Top;
Width :=Right-Left;
Canvas.CopyRect(Rect(0,0,Width,Height), Image1.Canvas, ARect);
end;
Bmp.SaveToFile('c:\copyrect.jpg');
finally
Bmp.Free;
end;
А при обработке этой процедуры выдается такая ошибка - Can only modify am image if it contains a bitmap. Как это исправить?
Mihey_temporary (2004-11-06 00:46:00) [9]В справке Delphi набери "TGraphic.SaveToFile" и посмотри пример.