2012-05-09 38 views
4

アイデアは、データベース(テキストと画像)から日付を取得し、これらのデータをIDフォームのような別の画像に追加して、新しい画像を保存します。Delphi:イメージにテキストを追加して新しいイメージを保存する方法

これはどのようにデルファイで行うことができますか?

THX

+4

イメージをTBitmapにロードします。 TBitmap.Canvas.TextOutを呼び出します。ビットマップを保存します。 –

+5

ようこそStackOverflowへ!あなたの質問を言い換えてみてください。それは完全な宿題のように私に聞こえる、あなたは何か試したことがありますか?あなたの質問に:1)* DBから画像をロードする* - インターネット上にたくさんの例があります。ただ一つだけを検索してみてください。2)これらのデータを別の画像に追加してください。どうやって ? DBから画像を読み込んでテキストを読み込み、画像の説明をして、この説明を画像に描画してどこかに保存することを意味しましたか? IDフォームは何ですか? – TLama

+0

@TLamaはい、私はDBから画像をロードしました。ここに私のIDフォーム:http://i891.photobucket.com/albums/ac114/evilkidaz/ID.png私は、DBから名前、姓と画像をロードし、フォームの場所に置く必要があります。それを保存します。画像にこれらのデータを挿入する際に問題が発生する場合があります。 DavidHeffernan返信いただきありがとうございます。テキストは灰色の背景で表示されます。私はフォントを変更できますか?それを大きくするか色を変える? 編集:画像を挿入する方法を見つけました:[code] Image1.Canvas.Draw(1,1、graphic); [/ code] –

答えて

13

試してみてください。

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; 
:ここ
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; 

は、私は私の訪問カードを作成します( d:\llamas.pngとして necessary imageファイルを保存することを忘れないでください)方法の例であります

このようになります。

+1

:Dはうまくいきます 助けてくれてありがとう –

+5

@TLama背景を扱う慣用的なDelphiの方法は、 'Canvas.Brush.Style:= bsClear'を設定することです。あなたのやり方はうまくいきますが、VCLがうまくそれを包み込むときに、生のGDIを使う必要はありません。 –

+1

@David、絶対に!私はどこでこれを仮定したのか分からない。それは私がずっと前に見たいくつかの古い例からでなければならない。今私は(GDIベースの)フレームワークを使用しています。このフレームワークはラップされているので、それについて考えることさえしませんでした。ヒントありがとう! – TLama

関連する問題