| T O P I C    R E V I E W | 
              
                | yogiyang | Posted - Sep 07 2012 : 05:27:45 I want to water mark images with text entered by user.
 
 How can I do this.
 
 I have attached a sample showing what I want to achieve.
 
 TIA
 
 Yogi Yang
 
 
  
 
 Yogi Yang
 | 
              
                | 14   L A T E S T    R E P L I E S    (Newest First) | 
              
                | xequte | Posted - Nov 29 2016 : 14:05:40 Hi John
 
 Yes, you should be using the newer: ImageEnView1.Proc.TextOut:
 
 http://www.imageen.com/help/TImageEnProc.TextOut.html
 
 Nigel
 Xequte Software
 www.xequte.com
 nigel@xequte.com
 | 
              
                | john_siggy@yahoo.com | Posted - Nov 28 2016 : 14:07:45 Thank you for your excellent response.  The watermark code works well but is very slow even putting out one line: "Demo Program",
 
 Seems adding a layer and then merging layers is too slow. Is there some way to use IETextOut to the bitmap more directly.
 
 Thanks again,
 
 John
 | 
              
                | xequte | Posted - Nov 28 2016 : 03:56:04 Hi
 
 So you draw the watermark after the NewFrame event?
 
 
 Nigel
 Xequte Software
 www.xequte.com
 nigel@xequte.com
 
 | 
              
                | john_siggy@yahoo.com | Posted - Nov 27 2016 : 18:28:14 I tried drawing text at an angle and it only worked on empty black images. I have a TImageEnVect being video refreshed in the NewFrame event of an TImageEnMView. The code is:
 
 ImageEnVect1.IEBitmap.Assign(ImageEnMView1.GetTIEBitmap(idx));
 ImageEnVect1.Update;
 
 Cant see the text over the image;
 
 Thanks
 | 
              
                | abbasiali | Posted - Sep 23 2016 : 16:14:32 Hi Bill
 
 Sorry, I Found my problem and fixed my problem.
 I think "procedure TForm1.Watermark1Click(Sender: TObject);" is procedure which working with "procedure IETextOut(Canvas: TCanvas; x, y: integer; angle: integer; const Text: string);"!
 Your sample is good and it was my mistake.
 
 
 
 Best regards
 
 Ali Abbasi
 | 
              
                | w2m | Posted - Sep 23 2016 : 15:56:55 I tested the code here and found it functions correctly.  What problem are you having?  How does it not work?  Show the code you are using.
 
 Bill Miller
 Adirondack Software & Graphics
 Email: w2m@hughes.net
 EBook: http://www.imageen.com/ebook/
 Custom Commercial ImageEn Development
 | 
              
                | abbasiali | Posted - Sep 23 2016 : 15:43:54 Hi Nigel
 
 Watermark1Click(................);
 Please help me for arguments for it procedure for make  similar Yogi Yang image.
 
 
 
 Best regards
 
 Ali Abbasi
 | 
              
                | xequte | Posted - Sep 23 2016 : 11:42:43 Hi Ali
 
 If Text1.Text = 'this is DEMO version'
 
 Then the code above should work fine for you.
 
 
 
 Nigel
 Xequte Software
 www.xequte.com
 nigel@xequte.com
 
 | 
              
                | abbasiali | Posted - Sep 23 2016 : 03:55:54 Hi
 
 Please help me I call above Watermark1Click procedure and I can not call it procedure!
 
 I cannot make a watermark in a image with it procedure.
 For call watermark which I most write code for watermark "this is DEMO version"?
 
 
 Best regards
 
 Ali Abbasi
 | 
              
                | xequte | Posted - Sep 22 2016 : 12:13:09 Sorry, are you having difficulty with the cod above? In what way?
 
 
 
 Nigel
 Xequte Software
 www.xequte.com
 nigel@xequte.com
 
 | 
              
                | abbasiali | Posted - Sep 20 2016 : 14:01:48 Hi
 
 Which code I most be write for print watermark with above procedure for image?
 
 Best regards
 
 Ali Abbasi
 | 
              
                | giancarlo | Posted - Sep 19 2016 : 13:37:28 just a fix (for batch use and IE6.x):
 
 
procedure TForm1.Watermark1Click(Sender: TObject);
var
  i: integer;
  j: integer;
  iLayer: integer;
  iSpacing: integer;
  iText: string;
  iRows: integer;
begin
  Screen.Cursor := crHourGlass;
  try
    iLayer := ImageEnView1.LayersAdd;
    ImageEnView1.Proc.Fill(CreateRGB(255, 255, 255));
    ImageEnView1.IEBitmap.Canvas.Font.Name := 'Arial';
    ImageEnView1.IEBitmap.Canvas.Font.Height := 25;
    ImageEnView1.IEBitmap.Canvas.Font.Color := clGray;
    iText:='';
    for i := 0 to 60 do
      iText := iText + '     ' + Text1.Text;
    iRows := 100;
    for j := 0 to iRows do
    begin
      iSpacing := 150;
      iSpacing := iSpacing * j;
      IETextOut(ImageEnView1.IEBitmap.Canvas, -60, iSpacing, 45, iText); // draw text on second layer
    end;
    // remove the white, making it as transparent
    ImageEnView1.Proc.SetTransparentColors(CreateRGB(255, 255, 255), CreateRGB(255, 255, 255), 0);
    ImageEnView1.LayersMergeAll;
    ImageEnView1.Update;
  finally
    Screen.Cursor := crDefault;
  end;
end; | 
              
                | yogiyang | Posted - Sep 10 2012 : 07:43:48 Hello William,
 
 Thanks for the solution.
 
 
 Yogi Yang
 | 
              
                | w2m | Posted - Sep 07 2012 : 09:05:09 Hi Yogi:
 
 Try this:
 
 
 uses ImageEnProc, HYIEutils, HYIEdefs;
procedure IETextOut(Canvas: TCanvas; x, y: integer; angle: integer; const Text: string);
var
  LogFont: TLogFont;
begin
  with Canvas do
  begin
    GetObject(Font.Handle, SizeOf(TLogFont), @LogFont);
    LogFont.lfEscapement := angle * 10;
    LogFont.lfQuality := NONANTIALIASED_QUALITY;
    LogFont.lfWeight := FW_BOLD;
    Font.Handle := CreateFontIndirect(LogFont);
    TextOut(x, y, Text);
    DeleteObject(Font.Handle);
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  ImageEnView1.EnableAlphaChannel := True;
  ImageEnView1.LayersSync := True;
end;
procedure TForm1.Watermark1Click(Sender: TObject);
var
  i: integer;
  j: integer;
  iLayer: integer;
  iSpacing: integer;
  iText: string;
  iRows: integer;
begin
  Screen.Cursor := crHourGlass;
  try
    iLayer := ImageEnView1.LayersAdd;
    ImageEnView1.Proc.Fill(CreateRGB(255, 255, 255));
    ImageEnView1.Bitmap.Canvas.Font.Name := 'Arial';
    ImageEnView1.Bitmap.Canvas.Font.Height := 25;
    ImageEnView1.Bitmap.Canvas.Font.Color := clGray;
    for i := 0 to 60 do
      iText := iText + '     ' + Text1.Text;
    iRows := 100;
    for j := 0 to iRows do
    begin
      iSpacing := 150;
      iSpacing := iSpacing * j;
      IETextOut(ImageEnView1.Bitmap.Canvas, -60, iSpacing, 45, iText); // draw text on second layer
    end;
    // remove the white, making it as transparent
    ImageEnView1.Proc.SetTransparentColors(CreateRGB(255, 255, 255), CreateRGB(255, 255, 255), 0);
    ImageEnView1.LayersMergeAll;
    ImageEnView1.Update;
  finally
    Screen.Cursor := crDefault;
  end;
end;
 I am sure this could be improved and optimised, but it seems to give you what you are looking for.
 
 William Miller
 Adirondack Software & Graphics
 Email: w2m@frontiernet.net
 EBook: http://www.imageen.com/ebook/
 Apprehend: http://www.frontiernet.net/~w2m/index.html
 |