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

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

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

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

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

:)

Что, вообще на канвасе никогда ничего не рисовал и текст не выводил? Тогда, лучше "найти программиста" (с)
...
Рейтинг: 0 / 0
24.02.2019, 12:23
    #39778411
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Водяной знак + текст по центру картинки
asviridenkov, ну почему же :)
уже изучаю DrawTextEx.
я про неё не знал, например
...
Рейтинг: 0 / 0
24.02.2019, 12:25
    #39778414
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Водяной знак + текст по центру картинки
Кстати, в справке Tokyo ни слова про DrawTextEx и TDrawTextParams.
...
Рейтинг: 0 / 0
24.02.2019, 12:28
    #39778415
X11
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
24.02.2019, 12:33
    #39778416
X11
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
24.02.2019, 13:13
    #39778422
X11
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
24.02.2019, 13:58
    #39778429
Любезный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Водяной знак + текст по центру картинки
Да выпей пива ещё :)
...
Рейтинг: 0 / 0
25.02.2019, 10:23
    #39778655
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Водяной знак + текст по центру картинки
О, до мну дошло, что Bitmap, на котором рисуется текст, должен быть полностью прозрачным :)
...
Рейтинг: 0 / 0
25.02.2019, 11:55
    #39778705
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Водяной знак + текст по центру картинки
X11О, до мну дошло, что Bitmap, на котором рисуется текст, должен быть полностью прозрачным :)Скорее наоборот - полностью непрозрачный, потому как DrawTextEx ничего о прозрачности не знает.

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

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

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

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

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

Если у ТС картинки с прозрачностью, то задача у него не такая уж и элементарная.
...
Рейтинг: 0 / 0
25.02.2019, 15:57
    #39778865
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Водяной знак + текст по центру картинки
Dimonka, может поделишься примером?
...
Рейтинг: 0 / 0
25.02.2019, 16:55
    #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
25.02.2019, 17:01
    #39778915
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Водяной знак + текст по центру картинки
В догонку - у тебя в твоём примере текст нарисован с тенью. Тень тоже можно нарисовать (asviridenkov не даст соврать ), но опять же для этого потребуется понимание процесса получения тени.
Плюс рисовать с помощью ClearText по тени наверное смысла большого нет. Но тут я готов услышать опровержение моего заблуждения.
...
Рейтинг: 0 / 0
25.02.2019, 17:15
    #39778926
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Водяной знак + текст по центру картинки
Тень необязательна
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Водяной знак + текст по центру картинки / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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