Author |
Topic  |
|
john_siggy@yahoo.com
  
USA
167 Posts |
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, |
|
w2m
   
USA
1990 Posts |
|
john_siggy@yahoo.com
  
USA
167 Posts |
Posted - Jan 27 2018 : 13:18:10
|
Thanks for your interest. I am using 7.0.1 but may upgrade if needed.
|
 |
|
w2m
   
USA
1990 Posts |
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
  
USA
167 Posts |
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
   
USA
1990 Posts |
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
  
USA
167 Posts |
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. |
 |
|
john_siggy@yahoo.com
  
USA
167 Posts |
Posted - Jan 28 2018 : 12:10:44
|
Hi Bill,
I Emailed an example
Insert Image:  |
 |
|
w2m
   
USA
1990 Posts |
|
w2m
   
USA
1990 Posts |
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
|
 |
|
john_siggy@yahoo.com
  
USA
167 Posts |
Posted - Jan 28 2018 : 19:43:01
|
Thanks a lot Bill. Need to upgrade to 7.5.
Cheers,
John |
 |
|
xequte
    
39053 Posts |
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
|
 |
|
|
Topic  |
|
|
|