PDA

Просмотр полной версии : [Помогите!] Работа с изображением в Delphi 7


NoName74
01.08.2011, 09:02
Всем привет! Вобщем, дело такое:
На форме есть image, который загружается из C:\image.jpeg. Этот image можно перемещать по форме во время работы программы.
Передо мной стоит задача - сохранить в отдельный файл определённую часть изображения. Как это сделать?
Использую вот такое:
rocedure TForm1.Button1Click(Sender: TObject);
var
B:TBitmap;
begin
B:=TBitmap.Create;
B.Width:=Bevel1.Width;
B.Height:=Bevel1.Height;
B.Canvas.Draw(0,0,Image1.Picture.Graphic);
B.SaveToFile('fragment.jpeg');
B.Free;
end;
Но он сохраняет верхюю правую часть image, где бы он не находжился на форме.
Помогите, заранее спасибо!

Тигрь
01.08.2011, 09:11
Попробуй так:

rocedure TForm1.Button1Click(Sender: TObject);
var
B:TBitmap;
begin
B:=TBitmap.Create;
B.Left:= тут указываешь нужное тебе значение;
B.Top:= тут указываешь нужное тебе значение;
B.Width:=Bevel1.Width;
B.Height:=Bevel1.Height;
B.Canvas.Draw(0,0,Image1.Picture.Graphic);
B.SaveToFile('fragment.jpeg');
B.Free;
end;

NoName74
01.08.2011, 13:28
Ошибка при компиляции, даже две ошибки:
[Ссылки могут видеть только зарегистрированные и активированные пользователи] ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

Dinmaite[Work]
01.08.2011, 13:51
Потому что у битовой карты нет таких переменных.
Вообще, используй
B.Canvas.CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect);

Скопирует на канву компонента B, в место обозначенное Dest, изображение из место обозначенного Source, канвы Canvas.
Ну и дальше сохраняй в файл.

NoName74
01.08.2011, 17:08
а можно чуть-чуть разъяснить? я ещё не особо понимаю в делфи

Dinmaite[Work]
02.08.2011, 09:51
Я надеюсь так достаточно ясно :)

procedure TForm1.Button1Click(Sender: TObject);
var
B:TBitmap;
begin
B:=TBitmap.Create;
B.Width:=bevel1.Width;
B.Height:=bevel1.Height;
B.Canvas.CopyRect(rect(0,0,bevel1.Width,bevel1.Hei ght), Image1.Canvas,
rect(bevel1.Left-image1.Left,bevel1.Top-image1.Top,bevel1.Width+bevel1.left,bevel1.Height+ bevel1.Top));
B.SaveToFile('fragment.bmp');
B.Free;
end;

lolwut98
02.08.2011, 15:48
юзай bitblt