powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Водяной знак + текст по центру картинки
19 сообщений из 19, страница 1 из 1
Водяной знак + текст по центру картинки
    #39778398
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В сети есть примеры, но они относительно древние. Некоторые без комментариев и что-то подправить сложно.
Тем более, что с графикой почти совсем не имел дело.
Задача такая.
Есть много готовых картинок.
Нужно загрузить и обработать каждую каждую картинку (jpg/png): на неё наложить водяной знак (jpg/png) в виде круга по центру, а по центру, внутри круга написать небольшой текст с переносами.

Я начал использовать две компоненты TcxImage и одну TcxLabel, т.к. там уже есть готовые свойства для центрирования. В принципе получается почти то, что нужно. Но это всё видно на форме, а как сохранить коллаж в файл, не знаю. Не получается сделать нормальный снимок формы - получается криво + заголовок самой формы.

За примеры и идеи буду благодарен.
Может у кого-то есть готовые более менее современные примеры?
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778403
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

А почему просто не использовать DrawTextEx ?
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778404
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что:
X11с графикой почти совсем не имел дело.

:)
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778407
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11потому что:
X11с графикой почти совсем не имел дело.

:)

Что, вообще на канвасе никогда ничего не рисовал и текст не выводил? Тогда, лучше "найти программиста" (с)
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778411
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov, ну почему же :)
уже изучаю DrawTextEx.
я про неё не знал, например
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778414
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в справке Tokyo ни слова про DrawTextEx и TDrawTextParams.
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778415
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TForm3.cxButton2Click(Sender: TObject);
Var
  R: TRect;
  Par: TDrawTextParams;
  Format: Cardinal;
begin

  Par.cbSize := SizeOf(Par);
  Par.iTabLength := 25;
  Par.iLeftMargin := 0;
  Par.iRightMargin := 0;
  Format := DT_EDITCONTROL or DT_LEFT or DT_TOP or DT_NOPREFIX or DT_WORDBREAK;

  R := Rect(0, 0, Panel1.Width, Panel1.Height);
  DrawTextEx(cxImage3.Picture.Bitmap.Canvas.Handle, PChar(cxLabel1.Caption), Length(cxLabel1.Caption), R, Format, @Par);
end;



в итоге на cxImage3 ничего нет, ЧЯДНТ?
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778416
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так уже получается немного

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
procedure TForm3.cxButton2Click(Sender: TObject);
Var
  R: TRect;
  Par: TDrawTextParams;
  Format: Cardinal;
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create;

  Par.cbSize := SizeOf(Par);
  Par.iTabLength := 25;
  Par.iLeftMargin := 0;
  Par.iRightMargin := 0;
  Format := DT_EDITCONTROL or DT_LEFT or DT_TOP or DT_NOPREFIX or DT_WORDBREAK;

  Bitmap.Width := cxImage1.Picture.Width;
  Bitmap.Height := cxImage1.Picture.Height;

  R := Rect(0, 0, Bitmap.Width, Bitmap.Height);
  caption := Bitmap.Width.ToString;

  DrawTextEx(Bitmap.Canvas.Handle, PChar(cxLabel1.Caption), Length(cxLabel1.Caption), R, Format, @Par);
  cxImage3.Picture.Bitmap.Assign(Bitmap);
  Bitmap.DisposeOf;
end;
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778422
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
procedure TForm3.cxButton2Click(Sender: TObject);
Var
  R: TRect;
  Par: TDrawTextParams;
  Format: Cardinal;
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create;

  Par.cbSize := SizeOf(Par);
  Par.uiLengthDrawn := Length(cxLabel1.Caption);
  Par.iTabLength := 8;
  Par.iLeftMargin := 0;
  Par.iRightMargin := 0;

  Format := DT_EDITCONTROL or DT_CENTER or DT_VCENTER or DT_NOPREFIX or DT_WORDBREAK or DT_NOCLIP;

  Bitmap.Width := cxImage1.Picture.Width;
  Bitmap.Height := cxImage1.Picture.Height;
  caption := Bitmap.Width.ToString + '/' + Bitmap.Height.ToString;

  R := Rect(0, 0, Bitmap.Width, Bitmap.Height);

  Bitmap.Canvas.Font := cxLabel1.Style.Font;
  DrawTextEx(Bitmap.Canvas.Handle, PChar(cxLabel1.Caption), -1, R, Format, @Par);
  cxImage3.Picture.Bitmap.Width := Bitmap.Width;
  cxImage3.Picture.Bitmap.Height := Bitmap.Height;

  cxImage3.Picture.Bitmap.Assign(Bitmap);
  Bitmap.DisposeOf;
  Self.Invalidate;
end;



текст без cleartype рисуется :(
а у cxLabel1 красивый шрифт
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778429
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да выпей пива ещё :)
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778655
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, до мну дошло, что Bitmap, на котором рисуется текст, должен быть полностью прозрачным :)
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778705
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11О, до мну дошло, что Bitmap, на котором рисуется текст, должен быть полностью прозрачным :)Скорее наоборот - полностью непрозрачный, потому как DrawTextEx ничего о прозрачности не знает.

Можешь ещё попробовать в сторону Graphics32/AggPas/GDIPlus посмотреть, но изучением одной функции не обойдёшься..
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778736
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пытался использовать Graphics32, но примеров и справки очень мало :(
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778750
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimonka
Можешь ещё попробовать в сторону Graphics32/AggPas/GDIPlus посмотреть, но изучением одной функции не обойдёшься..

А ты думаешь Graphics32 и AggPas сами текст рисуют?

Вообще у ТС задача простейшая, только он не в том порядке решает. Ему надо сначала скопировать картинку на битмап, написать на ней, и сохранить обратно.
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778808
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovDimonkaМожешь ещё попробовать в сторону Graphics32/AggPas/GDIPlus посмотреть, но изучением одной функции не обойдёшься..

А ты думаешь Graphics32 и AggPas сами текст рисуют?

Вообще у ТС задача простейшая, только он не в том порядке решает. Ему надо сначала скопировать картинку на битмап, написать на ней, и сохранить обратно. Не думаю, а знаю. Обе вполне рисуют сами. Даже в Agg по-моему хинтинг свой был. Правда wordwrap и эллипсы скорее всего самому придётся делать.

Если у ТС картинки с прозрачностью, то задача у него не такая уж и элементарная.
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778865
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimonka, может поделишься примером?
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778910
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Dimonka, может поделишься примером?Возьми к примеру пример :-) :
.\Graphics32\Examples\Vcl\Drawing\RenderText_Ex

Вот пример с VPR (это такой "движок" растеризации векторных полигонов) и разными методами ClearText:
https://github.com/graphics32/graphics32/tree/master/Examples/Drawing/TextVPR

А в Agg примеры вообще жуть:
https://github.com/CWBudde/AggPasMod/blob/master/Examples/Simple/RasterText.dpr
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778915
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку - у тебя в твоём примере текст нарисован с тенью. Тень тоже можно нарисовать (asviridenkov не даст соврать ), но опять же для этого потребуется понимание процесса получения тени.
Плюс рисовать с помощью ClearText по тени наверное смысла большого нет. Но тут я готов услышать опровержение моего заблуждения.
...
Рейтинг: 0 / 0
Водяной знак + текст по центру картинки
    #39778926
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тень необязательна
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Водяной знак + текст по центру картинки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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