Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
Женя32
Member

Откуда:
Сообщений: 63
Здравствуйте!
Вывожу текст в определенном мести изображения, но при масштабировании картинки вывод текста не попадает в нужное место.
Подскажите, пожалуйста, как это можно исправить?
9 июл 19, 20:00    [21923771]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
Наверное умножать X и Y текста на коэф. масштабирования.
9 июл 19, 20:56    [21923793]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
Женя32
Member

Откуда:
Сообщений: 63
Dimitry Timokhov
Наверное умножать X и Y текста на коэф. масштабирования.

А как это сделать?
Вот так масштабирую:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Image1.Picture.LoadFromFile('1.bmp');
    Izoom:= Izoom - 5;
  Image1.Width  := Round(Image1.Picture.Width  * Izoom / 100);
  Image1.Height := Round(Image1.Picture.Height * Izoom / 100);
     resize_img(Image1,Image1.Height,Image1.Height);
end;

Вот так вывожу текст:
procedure TForm1.Edit1Change(Sender: TObject);
var
  s: string;
begin
     s:=Edit1.Text;
     with Image1.Canvas do
      begin
          Font.Size:=22;
          Font.Name:='Lucida Console';
          Font.Color:=clBlack;
          Font.Style:= Image1.Canvas.Font.Style + [fsBold];
         SetTextCharacterExtra(Image1.Canvas.Handle,34);
             TextOut(300,337,s);

      end;


end;
9 июл 19, 21:37    [21923806]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
Я код не выполнял - как бэ не все в примере кода есть, чтобы его можно было выполнить.

Но может попробовать 300 и 337 также умножать на "Izoom / 100"?
9 июл 19, 22:26    [21923824]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
Женя32
Member

Откуда:
Сообщений: 63
Dimitry Timokhov
Я код не выполнял - как бэ не все в примере кода есть, чтобы его можно было выполнить.

Но может попробовать 300 и 337 также умножать на "Izoom / 100"?

А как это сделать? В какой процедуре?
9 июл 19, 22:42    [21923832]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
Женя32
Member

Откуда:
Сообщений: 63
А может есть какой-то способ "привязаться" к определенному участку картинки?...
9 июл 19, 22:49    [21923840]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
Женя32
Member

Откуда:
Сообщений: 63
Масштабирую так:
  if image1.Proportional then begin
    scale:=max(img.Height/ny, img.Width/nx);
    if scale<1 then scale:=1;
    nx:=trunc(img.Width/scale);
    ny:=trunc(img.Height/scale);
  end;
  t:=TBitmap.Create;
  t.Assign(img.Picture.Graphic);
  t.PixelFormat:=pf24bit;
  h:=t.Canvas.Handle;
  SetStretchBltMode(h, HALFTONE);
  StretchBlt(h, 0,0,nx,ny, h, 0,0,t.Width,t.Height, SRCCOPY);
  t.Width:=nx;
  t.Height:=ny;
  img.Picture.Assign(t);
  t.Free;
9 июл 19, 23:09    [21923848]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 33
Женя32
Dimitry Timokhov
Я код не выполнял - как бэ не все в примере кода есть, чтобы его можно было выполнить.

Но может попробовать 300 и 337 также умножать на "Izoom / 100"?

А как это сделать? В какой процедуре?


Ну, видимо, в TForm1.Edit1Change.
Ты же в TForm1.BitBtn1Click вычисляешь Izoom. Видимо, это переменная (член класса).
В TForm1.Edit1Change напиши:
TextOut(Round(300 * Izoom / 100), Round(337 * Izoom / 100), s);


Или я что-то в вопросе не понял...
9 июл 19, 23:36    [21923862]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
Женя32
Member

Откуда:
Сообщений: 63
Подскажите еще, пожалуйста, как сохранять текст при масштабировании?
11 июл 19, 19:35    [21925225]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2114
Женя32,

Существует множество книжек и статей по графике. Почитай хоть что-нибудь
12 июл 19, 00:48    [21925352]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
x1ca4064
Member

Откуда:
Сообщений: 979
Женя32
Подскажите еще, пожалуйста, как сохранять текст при масштабировании?


Напишите функцию масштабирования TPoint и TRect:
function PointScale(const P:TPoint;const XScale,YScale:extended;const XBias,YBias:integer):TRect;
begin
  Result.X:=Trunc(P.X*XScale)+XBias;
  Result.Y:=Trunc(P.Y*YScale)+YBias;
end;

function RectScale(const R:TRect;const XScale,YScale:extended;const XBias,YBias:integer):TRect;
begin
  Result.TopLeft:=PointScale(R.TopLeft,XScale,YScale,XBias,YBias);
  Result.BottomRight:=PointScale(R.BottomRight,XScale,YScale,XBias,YBias);
end;

procedure ScaledTextOut(C:TCanvas;const X,Y:integer;const Txt:string;
  const XScale,YScale:extended;const XBias,YBias:integer);
begin
  with PointScale(X,Y,XScale,YScale,XBias,YBias) do
  C.TextOut(X,Y,Txt);
end;

Значения масштабирования/сдвига можно поместить в структуру:
type
  TMyScale=record
    Sxx,Sxy,Syx,Syy:extended;
    BiasX,BiasY:integer;
  end;

Нужно добавить процедуру масштабирования шрифта.
Это Вы с формой ФНС боритесь?
12 июл 19, 06:46    [21925380]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3260
SetWorldTransform случайно не поможет?
12 июл 19, 11:06    [21925538]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
DimaBr
Member

Откуда:
Сообщений: 11128
SetWorldTransform случайно не поможет?

Поможет правильная постановка задачи, а не очередной велосипед решения неизвестного вопроса.
12 июл 19, 11:11    [21925541]     Ответить | Цитировать Сообщить модератору
 Re: Смещение координат вывода текста на Canvas при масштабировании изображения.  [new]
DimaBr
Member

Откуда:
Сообщений: 11128
Женя32
Здравствуйте!
Вывожу текст в определенном мести изображения, но при масштабировании картинки вывод текста не попадает в нужное место.
Подскажите, пожалуйста, как это можно исправить?

Мне почему то кажется, что вы продолжаете бороться с ветряной мельницей.
Повторяюсь, если конечная цель НАПЕЧАТАТЬ некий документ, то плясать нужно от ОтчётнойСистемы, которая умеет и печатать и масштабировать

К сообщению приложен файл. Размер - 54Kb
12 июл 19, 11:20    [21925554]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить