Почему при вырезании части изображения выходное изображение получается искаженным?
Программа под смартфон. На форме лежит Layout, на нем Image На картинке, посредине лежит Rectangle. Когда я пытаюсь вырезать из картинки участок ограниченный Rectangle, выходное изображение не соответствует границам и имеет искаженный масштаб. Ка можно привести это в норму?
var
bmpS, bmpD: TBitMap;
iRectS: Trectf;
HD, wD: integer;
iRectD: Trectf;
Scalex, scaley: real;
begin
Scalex := 1;
scaley := 1;
bmpS := imgCameraView.Bitmap;
iRectS := Trectf.Create(TPointF.Create(Ramka.Position.X * Scalex,
Ramka.Position.Y * scaley), TPointF.Create((Ramka.Position.X + Ramka.Width)
* Scalex, (Ramka.Position.Y + Ramka.Height) * scaley));
wD := Max(0, Round(Ramka.Width));
HD := Max(0, Round(Ramka.Height));
bmpD := TBitMap.Create(wD, HD);
iRectD := Trectf.Create(0, 0, Ramka.Width, Ramka.Height);
Code.Visible := True;
if bmpD.Canvas.BeginScene then
try
bmpD.Canvas.DrawBitmap(bmpS, iRectS, iRectD, 1);
bmpD.Canvas.EndScene;
Code.Bitmap.assign(bmpD);
finally
bmpD.Free;
end;
Ответы (1 шт):
Автор решения: Lem0nti
→ Ссылка
Вероятно, потому что само изображение с камеры не такого же размера, как экран. Попробуйте пересчитать прямоугольник вырезки в доли от экрана, а потом пересчитать это в координаты картинки. Например:
- Картинка 2000х1500
- Экран 1000х800
- Прямоугольник на экране 150:150:800:600
- Относительный прямоугольник тогда будет 0,15:0,1875:0,8:0,75
- Прямоугольник для вырезки тогда будет 300:281:1600:1125