ImageEn for Delphi and C++ Builder ImageEn for Delphi and C++ Builder

 

ImageEn Forum
Profile    Join    Active Topics    Forum FAQ    Search this forumSearch
 All Forums
 ImageEn Library for Delphi, C++ and .Net
 ImageEn and IEvolution Support Forum
 Write Text not Transparent but Opaque background

Note: You must be registered in order to post a reply.
To register, click here. Registration is FREE!

View 
UserName:
Password:
Format  Bold Italicized Underline  Align Left Centered Align Right  Horizontal Rule  Insert Hyperlink   Browse for an image to attach to your post Browse for a zip to attach to your post Insert Code  Insert Quote Insert List
   
Message 

 

Emoji
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Black Eye [B)]
Frown [:(] Shocked [:0] Angry [:(!] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

 
Check here to subscribe to this topic.
   

T O P I C    R E V I E W
john_siggy@yahoo.com Posted - Jan 27 2018 : 10:05:01
Want to write text with an opaque background. This is similar to text with a transparent background but some of the background shows through. Want to use GDI Plus

Thanks in Advance,
11   L A T E S T    R E P L I E S    (Newest First)
xequte Posted - Jan 29 2018 : 02:32:20
Hi John

Sorry, the forum attachment code can't handle the @ symbol in your username I have encoded as %40

Nigel
Xequte Software
www.imageen.com
john_siggy@yahoo.com Posted - Jan 28 2018 : 19:43:01
Thanks a lot Bill. Need to upgrade to 7.5.

Cheers,

John
w2m Posted - Jan 28 2018 : 14:58:04
John,

Here are 3 ways to achieve your objective:

procedure TForm1.TextLayer1Click(Sender: TObject);
var
  iLayer: Integer;
begin
  Screen.Cursor := crHourglass;
  try
    ImageEnView1.Proc.SaveUndo('Add Text Layer ' +
      IntToStr(ImageEnView1.Proc.UndoCount + 1));
    Undo1.Hint := ImageEnView1.Proc.UndoCaptions[0];
    Undo1.Enabled := ImageEnView1.Proc.CanUndo;
    iLayer := ImageEnView1.LayersAdd(ielkText);
    ImageEnView1.Layers[iLayer].Name := 'Text Layer';
    EditText1.Text := 'Security Monitor Pro- Text Layer';
    TIETextLayer(ImageEnView1.CurrentLayer).Text := EditText1.Text;
    ImageEnView1.Layers[iLayer].PosX := ImageEnView1.Layers[iLayer - 1]
      .PosX + 100;
    ImageEnView1.Layers[iLayer].PosY := ImageEnView1.Layers[iLayer - 1]
      .PosY + 100;
    ImageEnView1.MouseInteract := ImageEnView1.MouseInteract +
      [miMoveLayers, miResizeLayers];
    ImageEnView1.Layers[ImageEnView1.LayersCurrent].Height :=
      ImageEnView1.IEBitmap.Height div 4;
    ImageEnView1.Layers[ImageEnView1.LayersCurrent].Width :=
      ImageEnView1.IEBitmap.Width div 3;
    TIETextLayer(ImageEnView1.CurrentLayer).AutoSize := False;
    TIETextLayer(ImageEnView1.CurrentLayer).Alignment := iejCenter;
    TIETextLayer(ImageEnView1.CurrentLayer).Layout := ielCenter;
    TIETextLayer(ImageEnView1.CurrentLayer).BorderColor := clNone;
    TIETextLayer(ImageEnView1.CurrentLayer).FillColor := ColorBox2.Selected;
    TIETextLayer(ImageEnView1.CurrentLayer).FillColor2 := ColorBox2.Selected;
    TIETextLayer(ImageEnView1.CurrentLayer).Transparency := UpDown1.Position;
    TIETextLayer(ImageEnView1.CurrentLayer).BorderWidth := 0;
    TIETextLayer(ImageEnView1.CurrentLayer).Font.Size :=
      UpDownPenSize1.Position;
    TIETextLayer(ImageEnView1.CurrentLayer).Font.Color := ColorBox1.Selected;
    if Bold1.Down then
      TIETextLayer(ImageEnView1.CurrentLayer).Font.Style := [fsBold];
    if Italic1.Down then
      TIETextLayer(ImageEnView1.CurrentLayer).Font.Style :=
        TIETextLayer(ImageEnView1.CurrentLayer).Font.Style + [fsITalic];
    if UnderLine1.Down then
      TIETextLayer(ImageEnView1.CurrentLayer).Font.Style :=
        TIETextLayer(ImageEnView1.CurrentLayer).Font.Style + [fsUnderline];
    ImageEnView1.LayersCurrent := iLayer;
    ImageEnView1.Update;
    UpdateStatusBar;
  finally
    Screen.Cursor := crDefault;
  end;
end;

procedure TForm1.CreateLayerFromText1Click(Sender: TObject);
var
  iLayer: Integer;
begin
  EditText1.Text := 'Security Monitor Pro- Create Layer From Text';
  if Bold1.Down then
    iLayer := ImageEnView1.LayersCreateFromText(Trim(EditText1.Text), 'Arial',
      UpDownPenSize1.Position, ColorBox1.Selected, [fsBold], False, 3, 2, 0,
      AntiAlias1.Checked)
  else
    iLayer := ImageEnView1.LayersCreateFromText(Trim(EditText1.Text), 'Arial',
      UpDownPenSize1.Position, ColorBox1.Selected, [], False, 3, 2, 0,
      AntiAlias1.Checked);
  ImageEnView1.Proc.CastColor(0, ImageEnView1.IEBitmap.Height-1, TColor2TRGB(ColorBox2.Selected), 15);
  ImageEnView1.Proc.CastAlpha(0, ImageEnView1.IEBitmap.Height-1, TrackBarTransparency1.Position, 15);
  if iLayer <> -1 then
  begin
    ImageEnView1.Layers[iLayer].PosX := 0;
    ImageEnView1.Layers[iLayer].PosY := 0;
  end;
  ImageEnView1.MouseInteract := ImageEnView1.MouseInteract +
    [miMoveLayers, miResizeLayers];
  ImageEnView1.Update;
end;

procedure TForm1.RawText1Click(Sender: TObject);
begin
  // Add a new layer
  ImageEnView1.LayersAdd;
  ImageEnView1.CurrentLayer.PosX := 0;
  ImageEnView1.CurrentLayer.PosY := 0;
  ImageEnView1.CurrentLayer.Height := ImageEnView1.IEBitmap.Height div 4;
  ImageEnView1.CurrentLayer.Width := ImageEnView1.IEBitmap.Width;
  // White fill the new layer
  ImageEnView1.Proc.Fill(ColorBox2.Selected);
  // Make the white background transparent
  ImageEnView1.Proc.SetTransparentColors(TColor2TRGB(ColorBox2.Selected), TColor2TRGB(ColorBox2.Selected), TrackBarTransparency1.Position);
  EditText1.Text := ' Security Monitor Pro- Text Out ';
  // Output our text
  ImageEnView1.Proc.TextOut(Align_Text_Horz_Center, Align_Text_Vert_Center, EditText1.Text, 'Arial', UpDownPenSize1.Position, ColorBox1.Selected, [fsBold]);
  ImageEnView1.MouseInteract := ImageEnView1.MouseInteract +
    [miMoveLayers, miResizeLayers];
  ImageEnView1.Update;
end;


If none of these meet your needs then please discuss with Nigel.

Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development

w2m Posted - Jan 28 2018 : 12:11:57
Got it... Give me some time to try this.

Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development
john_siggy@yahoo.com Posted - Jan 28 2018 : 12:10:44
Hi Bill,

I Emailed an example

Insert Image:
john_siggy@yahoo.com Posted - Jan 28 2018 : 11:58:46
Text is normal but behind the clear text is an opaque background that allows, say half of the background to show Through. Somewhere between a transparent background and a background of, say, white.
w2m Posted - Jan 28 2018 : 11:58:40
Still not visible. Can you email me the bitmap or at least answer my question. I can not help unless I understand you.

Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development
john_siggy@yahoo.com Posted - Jan 28 2018 : 11:47:05
Looking for Opaque Text Background not transparent as in all your examples. Please see the attached image for examples of opaque background for text. In the third example you set: iPenAlpha := 255 but never use iPenAlpha.






Regards
w2m Posted - Jan 27 2018 : 13:22:55
My recommendation is to upgrade to 7.5, because it has text layers which makes it easy to reposition the text with the mouse and change Background colors, font colors, font name and text size and font attributes on the fly:
procedure TForm1.TextLayer1Click(Sender: TObject);
var
  i: Integer;
  iLayer: Integer;
begin
  Screen.Cursor := crHourglass;
  try
    ImageEnView1.Proc.SaveUndo('Add Text Layer ' +
      IntToStr(ImageEnView1.Proc.UndoCount + 1));
    Undo1.Hint := ImageEnView1.Proc.UndoCaptions[0];
    Undo1.Enabled := ImageEnView1.Proc.CanUndo;
    iLayer := ImageEnView1.LayersAdd(ielkText);
    ImageEnView1.Layers[iLayer].Name := 'Text Layer';
    TIETextLayer(ImageEnView1.CurrentLayer).Text := EditText1.Text;
    ImageEnView1.Layers[iLayer].PosX := ImageEnView1.Layers[iLayer - 1]
      .PosX + 100;
    ImageEnView1.Layers[iLayer].PosY := ImageEnView1.Layers[iLayer - 1]
      .PosY + 100;
    ImageEnView1.MouseInteract := ImageEnView1.MouseInteract +
      [miMoveLayers, miResizeLayers];
    if ImageEnView1.Layers[ImageEnView1.LayersCurrent].Width >
      ImageEnView1.IEBitmap.Width then
      ImageEnView1.Layers[ImageEnView1.LayersCurrent].Width :=
        ImageEnView1.IEBitmap.Width;
    TIETextLayer(ImageEnView1.CurrentLayer).Alignment := iejCenter;
    TIETextLayer(ImageEnView1.CurrentLayer).Layout := ielCenter;
    TIETextLayer(ImageEnView1.CurrentLayer).BorderColor := clNone;
    TIETextLayer(ImageEnView1.CurrentLayer).FillColor := ColorBox2.Selected;
    TIETextLayer(ImageEnView1.CurrentLayer).FillColor2 := ColorBox2.Selected;
    TIETextLayer(ImageEnView1.CurrentLayer).BorderWidth := 0;
    TIETextLayer(ImageEnView1.CurrentLayer).Font.Size :=
      UpDownPenSize1.Position;
    TIETextLayer(ImageEnView1.CurrentLayer).Font.Color := ColorBox1.Selected;
    if Bold1.Down then
      TIETextLayer(ImageEnView1.CurrentLayer).Font.Style := [fsBold];
    if Italic1.Down then
      TIETextLayer(ImageEnView1.CurrentLayer).Font.Style :=
        TIETextLayer(ImageEnView1.CurrentLayer).Font.Style + [fsITalic];
    if UnderLine1.Down then
      TIETextLayer(ImageEnView1.CurrentLayer).Font.Style :=
        TIETextLayer(ImageEnView1.CurrentLayer).Font.Style + [fsUnderline];
    TIETextLayer(ImageEnView1.CurrentLayer).AutoSize := True;
    ImageEnView1.LayersCurrent := iLayer;
    UpdateStatusBar;
  finally
    Screen.Cursor := crDefault;
  end;
end;


With older versions you could try LayersCreateFromText, but 7.5 works the best and the text in the layer is not editable without 7.5:
procedure TForm1.ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  iX := ImageEnView1.Layers[ImageEnView1.LayersCurrent].ConvXScr2Bmp(X);
  iY := ImageEnView1.Layers[ImageEnView1.LayersCurrent].ConvYScr2Bmp(Y);
  if AddText1.Down then
  begin
    if Bold1.Checked then
      iLayer := ImageEnView1.LayersCreateFromText(Trim(Text1.Text),
        Font1.Items[Font1.ItemIndex], StrToIntDef(FontSize1.Text, 20),
        PenColor1.Selected, [fsBold], Shadow1.Checked, 3, 2, 0,
        AntiAlias1.Checked)
    else
      iLayer := ImageEnView1.LayersCreateFromText(Trim(Text1.Text),
        Font1.Items[Font1.ItemIndex], StrToIntDef(FontSize1.Text, 20),
        PenColor1.Selected, [], Shadow1.Checked, 3, 2, 0, AntiAlias1.Checked);
    if iLayer <> -1 then
    begin
      ImageEnView1.Layers[iLayer].PosX := iX;
      ImageEnView1.Layers[iLayer].PosY := iY;
    end;
end;


You can also try iIECanvas.DrawText, but the text is not editable:
procedure TForm1.DrawText;
var
  iPenSize: Integer;
  iPenColor: TColor;
  iPenAlpha: Integer;
  iIECanvas: TIECanvas;
begin
  MyUndo(ImageEnView1);
  { Draw on the Non-Alpha Canvas }
  iIECanvas := TIECanvas.Create(ImageEnView1.IEBitmap.Canvas,
    AntiAlias1.Checked, UseGDIPlus1.Checked);
  iPenSize := StrToIntDef(PenSize1.Text, 20);
  iPenColor := PaintColor.Color;
  iPenAlpha := 255;
  iIECanvas.Font.Name := 'Arial';
  iIECanvas.Font.Size := iPenSize;
  iIECanvas.Font.Color := iPenColor;
  iIECanvas.Font.Style := [fsBold];
  iIECanvas.Font.Height := 72;
  iIECanvas.DrawText( EditText1.Text, Rect(0, 0, 500, 300));
  ImageEnView1.Bitmap.Modified := ImageEnView1.Proc.CanUndo;
  ImageEnView1.Update;
end;

john_siggy@yahoo.com Posted - Jan 27 2018 : 13:18:10
Thanks for your interest. I am using 7.0.1 but may upgrade if needed.
w2m Posted - Jan 27 2018 : 10:07:37
What version of ImageEn are you using?

Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development