Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2015, 18:40   #1
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию Добавить надпись на изображение и сохранить(с надписью уже)

Есть изображение photo.png. Вверху есть пустое место, там нужно сделать надпись с нужным мне шрифтом, размером текста. И потом сохранить готовое изображение. Все что я придумал, сделать ImageView, поверх него TextView, а потом делать скриншот экрана и нужную область вырезать.
igrok111 вне форума Ответить с цитированием
Старый 26.12.2015, 19:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Например это можно сделать так:
Код:
var     tb:TBitmap;
...
tb:=TBitmap.Create;
tb.LoadFromFile('c:\acd185.bmp');
 tb.Canvas.Brush.Style:=bsClear;
 tb.Canvas.TextOut(100,100,Edit1.Text);
tb.SaveToFile('c:\acd185.bmp');
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.12.2015, 19:43   #3
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Например это можно сделать так:
Код:
var     tb:TBitmap;
...
tb:=TBitmap.Create;
tb.LoadFromFile('c:\acd185.bmp');
 tb.Canvas.Brush.Style:=bsClear;
 tb.Canvas.TextOut(100,100,Edit1.Text);
tb.SaveToFile('c:\acd185.bmp');
Изображение должно быть только .bmp?
igrok111 вне форума Ответить с цитированием
Старый 26.12.2015, 22:09   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Все что я придумал, сделать ImageView, поверх него TextView, а потом делать скриншот экрана и нужную область вырезать.
месье знает толк в извращениях!
Цитата:
Изображение должно быть только .bmp?
нет. можно jpeg, png, gif, tif, а также более другие форматы хранения избражений.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 26.12.2015, 23:10   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Изображение должно быть только .bmp?
Нет, это просто пример из моих сусеков.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.12.2015, 01:33   #6
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Например это можно сделать так:
Код:
var     tb:TBitmap;
...
tb:=TBitmap.Create;
tb.LoadFromFile('c:\acd185.bmp');
 tb.Canvas.Brush.Style:=bsClear;
 tb.Canvas.TextOut(100,100,Edit1.Text);
tb.SaveToFile('c:\acd185.bmp');
Можно ли (как и с Label) выровнять данный текст по центру сверху? Также я задумывал сделать тень для текста, тут это можно реализовать? У меня вариант - 2 одинаковых текста один над другим, нижний черный, а верхний немного подвигаю на пару пикселей, таким образом тень делаю.
igrok111 вне форума Ответить с цитированием
Старый 27.12.2015, 04:13   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Можно ли (как и с Label) выровнять данный текст по центру сверху?
можно.
хочешь, подарю тебе самопальную функцию, которая рассчитывает позицию для TextOut()?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 27.12.2015, 09:35   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Можно ли (как и с Label) выровнять данный текст по центру сверху?
Если правильно рассчитаешь координаты то все получится.
Тебе поможет функция TextWidth()
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.12.2015, 10:32   #9
igrok111
Форумчанин
 
Регистрация: 12.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
можно.
хочешь, подарю тебе самопальную функцию, которая рассчитывает позицию для TextOut()?
Конечно хочу. А есть ли возможность растягивать текст по ширине картинки? То есть автоматически подгонять размер шрифта?

Цитата:
Сообщение от Stilet Посмотреть сообщение
Например это можно сделать так:
Код:
var     tb:TBitmap;
...
tb:=TBitmap.Create;
tb.LoadFromFile('c:\acd185.bmp');
 tb.Canvas.Brush.Style:=bsClear;
 tb.Canvas.TextOut(100,100,Edit1.Text);
tb.SaveToFile('c:\acd185.bmp');
я пытался применить этот код. У меня была ошибка "Bitmap image is not valid", видимо тк исходное изображение в формате jpg. Тогда я поменял на TJPEGImage.
Код:
var     TJPEGImage;
...
tb:=TJPEGImage.Create;
В итоге изображение сохранилось без ошибок, но надписей на нем не появилось.

Последний раз редактировалось Stilet; 27.12.2015 в 16:09.
igrok111 вне форума Ответить с цитированием
Старый 27.12.2015, 13:29   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Конечно хочу.
Код:
// Начальная точка вывода текста на канве внутри прямоугольника Rect
// с выравниванием горизонтальным и вертикальным
function GetTextPosition(const Text: string;                 // текст
                         const Canvas: TCanvas;              // канва
                         const Rect: TRect;                  // прямоугольник отрисовки
                         const TextMargin: Integer;          // размер полей
                         const Alignment: TAlignment;        // гориз. выравнивание
                         const Layout: TTextLayout): TPoint; // верт. выравнивание
var
  th, tw: Integer;
begin
  tw:= Canvas.TextWidth(Text);
  th:= Canvas.TextHeight(Text);

  case Alignment of
    taLeftJustify  : Result.x:= TextMargin;
    taCenter       : Result.x:= ((Rect.Right - Rect.Left) div 2) - (tw div 2);
    taRightJustify : Result.x:= (Rect.Right - Rect.Left) - tw - TextMargin;
  end; //case

  case Layout of
    tlTop:    Result.y:= TextMargin;
    tlCenter: Result.y:= ((Rect.Bottom - Rect.Top) div 2) - (th div 2);
    tlBottom: Result.y:= (Rect.Bottom - Rect.Top) - th - TextMargin;
  end; // case
end;
Цитата:
А есть ли возможность растягивать текст по ширине картинки? То есть автоматически подгонять размер шрифта?
а это тебе домашнее задание.

ho-ho-ho!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось Stilet; 27.12.2015 в 16:09.
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу сохранить изображение (делфи) NewLamer&Programer Помощь студентам 6 09.06.2013 23:28
visual C# сохранить БОЛЬШОЕ изображение Firstchar Помощь студентам 0 29.05.2013 15:32
Сохранить изображение из буфера Shouldercannon Мультимедиа в Delphi 13 14.03.2012 21:38
EmbeddedWB - сохранить изображение не перезагружая zver777 Работа с сетью в Delphi 11 26.06.2010 08:05
Сохранить изображение в таблицу Steil Общие вопросы Delphi 1 25.05.2010 10:36