2012-05-09 14 views
4

Идея - получить дату из базы данных (текст и изображение), затем добавить эти данные на другое изображение (например, ID-форму), а затем сохранить новое изображение.Delphi: как добавить текст в изображение и сохранить новое изображение?

как это можно сделать в дельфине?

ТНХ

+4

Загрузите изображение в TBitmap. Вызовите TBitmap.Canvas.TextOut. Сохраните растровое изображение. –

+5

Добро пожаловать в StackOverflow! Попробуйте перефразировать свой вопрос; это звучит для меня как полное задание на домашнюю работу, вы что-то пробовали? На ваши вопросы: 1) * загрузить образ из БД * - в Интернете есть куча примеров, просто попробуйте найти один 2) * добавьте эти данные в другое изображение * - какие данные вы хотите добавить к тому, что другое изображение и как ? Вы имели в виду загрузить изображение из БД вместе с некоторым текстом, скажем, с описанием изображения, и нарисовать это описание на изображении и сохранить его где-нибудь? И что такое идентификационная форма? – TLama

+0

@TLama да, я загрузил изображение из БД, и да, что-то в этом роде. здесь s ID-форму: http://i891.photobucket.com/albums/ac114/evilkidaz/ID.png Мне нужно загрузить имя, фамилию и изображение из БД и поместить их в свои места в форме, затем сохраните его. У меня только проблемы с вложением этих данных на картинке DavidHeffernan Спасибо за ваш ответ, но текст поставляется с серым фоном. и я могу изменить шрифт? сделать его больше или изменить цвета? Редактирование: я узнал, как вставить изображение: [code] Image1.Canvas.Draw (1,1, graphic); [/ code] –

ответ

13

Попробуйте следующее:

uses 
    PNGImage; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    PNGImage: TPNGImage; 
    BlobStream: TMemoryStream; 
begin 
    // create the PNG image instance 
    PNGImage := TPNGImage.Create; 
    try 
    // assuming you have in the BlobStream variable the image from a DB loaded 
    PNGImage.LoadFromStream(BlobStream); 
    // setup the text background to be transparent 
    PNGImage.Canvas.Brush.Style := bsClear; 
    // optionally configure the font 
    PNGImage.Canvas.Font.Size := 11; 
    PNGImage.Canvas.Font.Color := clRed; 
    PNGImage.Canvas.Font.Style := [fsBold]; 
    // and render it to the image's canvas 
    PNGImage.Canvas.TextOut(5, 5, 'SomeText'); 
    // save this modified image to the file 
    PNGImage.SaveToFile('c:\picture.png'); 
    finally 
    // and finally free the PNG image instance 
    PNGImage.Free; 
    end; 
end; 

Вот пример того, как бы я создать свою визитку (не забудьте сохранить файл necessary image в d:\llamas.png):

uses 
    GraphUtil, PNGImage; 

procedure CreateCard(const AFileFile: string; AImage: TPNGImage; 
    const AName, ASurname: string); 
begin 
    with TPNGImage.CreateBlank(COLOR_RGB, 8, 330, 160) do 
    try 
    GradientFillCanvas(Canvas, clWhite, $000080FF, 
     Canvas.ClipRect, gdVertical); 
    Canvas.StretchDraw(Rect(18, 18, 108, 108), AImage); 
    Canvas.Pen.Width := 2; 
    Canvas.Brush.Style := bsClear; 
    Canvas.Rectangle(5, 5, Width - 4, Height - 4); 
    Canvas.Font.Size := 12; 
    Canvas.Font.Style := [fsBold]; 
    Canvas.TextOut(110, 30, 'Form: ' + AName + ' :.'); 
    Canvas.TextOut(125, 60, 'Genus: ' + ASurname + ' :.'); 
    SaveToFile(AFileFile); 
    finally 
    Free; 
    end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    PNGImage: TPNGImage; 
begin 
    PNGImage := TPNGImage.Create; 
    try 
    // here you will load the image blob (by using LoadFromStream) 
    // instead of LoadFromFile 
    PNGImage.LoadFromFile('d:\llamas.png'); 
    CreateCard('d:\visit-card.png', PNGImage, 'Alpaca', 'Lama'); 
    finally 
    PNGImage.Free; 
    end; 
end; 

Вот как это выглядит:

enter image description here

+1

: D отлично работает благодарю вас за помощь –

+5

@TLama Идиоматический способ Delphi справиться с фоном - установить «Canvas.Brush.Style: = bsClear». Ваш способ работает, но я не вижу необходимости использовать необработанный GDI здесь, когда VCL отлично его обертывает. –

+1

@David, совершенно! Я даже не знаю, откуда я это сделал. Это должно быть из какого-то старого примера, который я видел давно. Теперь я использую свою (основанную на GDI) структуру, где такие вещи обернуты, поэтому я даже не думал об этом. Спасибо за подсказку! – TLama

Смежные вопросы