powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Смещение координат вывода текста на Canvas при масштабировании изображения.
14 сообщений из 14, страница 1 из 1
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39835687
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Вывожу текст в определенном мести изображения, но при масштабировании картинки вывод текста не попадает в нужное место.
Подскажите, пожалуйста, как это можно исправить?
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39835700
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное умножать X и Y текста на коэф. масштабирования.
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39835709
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry TimokhovНаверное умножать X и Y текста на коэф. масштабирования.
А как это сделать?
Вот так масштабирую:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
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;


Вот так вывожу текст:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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;
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39835715
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я код не выполнял - как бэ не все в примере кода есть, чтобы его можно было выполнить.

Но может попробовать 300 и 337 также умножать на "Izoom / 100"?
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39835719
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry TimokhovЯ код не выполнял - как бэ не все в примере кода есть, чтобы его можно было выполнить.

Но может попробовать 300 и 337 также умножать на "Izoom / 100"?
А как это сделать? В какой процедуре?
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39835725
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может есть какой-то способ "привязаться" к определенному участку картинки?...
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39835731
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Масштабирую так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  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;
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39835743
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Женя32Dimitry TimokhovЯ код не выполнял - как бэ не все в примере кода есть, чтобы его можно было выполнить.

Но может попробовать 300 и 337 также умножать на "Izoom / 100"?
А как это сделать? В какой процедуре?

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



Или я что-то в вопросе не понял...
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39836560
Женя32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите еще, пожалуйста, как сохранять текст при масштабировании?
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39836610
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Женя32,

Существует множество книжек и статей по графике. Почитай хоть что-нибудь
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39836636
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Женя32Подскажите еще, пожалуйста, как сохранять текст при масштабировании?

Напишите функцию масштабирования TPoint и TRect:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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;


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


Нужно добавить процедуру масштабирования шрифта.
Это Вы с формой ФНС боритесь?
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39836710
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SetWorldTransform случайно не поможет?
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39836712
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SetWorldTransform случайно не поможет?
Поможет правильная постановка задачи, а не очередной велосипед решения неизвестного вопроса.
...
Рейтинг: 0 / 0
Смещение координат вывода текста на Canvas при масштабировании изображения.
    #39836720
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Женя32Здравствуйте!
Вывожу текст в определенном мести изображения, но при масштабировании картинки вывод текста не попадает в нужное место.
Подскажите, пожалуйста, как это можно исправить?
Мне почему то кажется, что вы продолжаете бороться с ветряной мельницей.
Повторяюсь, если конечная цель НАПЕЧАТАТЬ некий документ, то плясать нужно от ОтчётнойСистемы, которая умеет и печатать и масштабировать
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Смещение координат вывода текста на Canvas при масштабировании изображения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]