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
 Printing error

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
Audax Posted - Feb 10 2022 : 08:19:13
Hi

I've used the bottom code to print the ImageEnMain(TImageEnVect) content and for years and it worked just well.


procedure TfrmTest.Print;
var
  TmpBmp: TIEBitmap;
begin
  // ImageEnMain contains a few layers...
  ImageEnMain.LayersCurrent:= 0;
  tmpBmp:= TIEBitmap.Create(ImageEnMain.IEBitmap.Width, ImageEnMain.IEBitmap.Height);

  try
    tmpBmp.AssignImage(ImageEnMain.IEBitmap);
    ImageEnPrint.AttachedIEBitmap:= tmpBmp;

    ImageEnMain.LayersDrawTo(tmpBmp);

    Printer.Title:= ExtractFileName(Application.ExeName) + '-printing';
    if cbxPortrait.Checked then
      Printer.Orientation:= poPortrait
    else
      Printer.Orientation:= poLandscape;

    if PrintDialog.Execute then
    begin
      Printer.BeginDoc;
      ImageEnPrint.PrintImage(Printer.Canvas,
                      0,
                      0,
                      0,
                      0,
                      ievpCENTER,
                      iehpCENTER,
                      iesSPECIFIEDSIZE,
                      PaperWidthCm / 2.54,
                      PaperHeightCm / 2.54,
                      1);
	  // PaperWidthCm and PaperHeightCm are calculated before...				  
      Printer.EndDoc;
    end;
  finally
    tmpBmp.Free;
  end;

end;


But after upgrading from version 6.3.0 to 9.2.0 I get an error "Out of memory".

 

compiled with : Delphi 10.4 Sydney
madExcept version : 5.1.1
callstack crc : $e8e65e3a, $cdca047b, $3a89a4f1
exception number : 1
exception class : EOutOfMemory
exception message : Out of memory.

main thread ($41b0):
00410437 +16b Test.exe System 4831 +0 DynArraySetLength
00410599 +005 Test.exe System 4831 +0 @DynArraySetLength
01179600 +1c8 Test.exe imageenproc _ResampleLinearEx
01176492 +30e Test.exe imageenproc _ResampleEx
011ea037 +33f Test.exe iexBitmaps TIEBitmap.RenderToCanvas
010fd81d +0b9 Test.exe imageenio ImageEnPrint.PrintImagePosEx
010fe1a1 +69d Test.exe imageenio ImageEnPrint.PrintImageEx
010fe6bf +0e7 Test.exe imageenio ImageEnPrint.PrintImage




If I change PrintDialog with PrinterSetupDialog it works again until I
try to print on "Microsoft Print to PDF".
Than the error is back.

Is this a bug that will be resolved in the next version, or do I have to change
somethink in my code?

Best regards.
8   L A T E S T    R E P L I E S    (Newest First)
xequte Posted - Mar 05 2022 : 20:07:58
Hi

I cannot recall when we transitioned, but in v9.2.0 you may need still need to wrap your PrintImage() call with:

  Printer.BeginDoc();
  ImageEnView1.IO.PrintImage();
  Printer.EndDoc();


Regarding your memory issue, can you please forward me a sample image and let me see if I can reproduce it here.

Nigel
Xequte Software
www.imageen.com
Audax Posted - Mar 04 2022 : 10:14:22
Hi,

Bdw, I have forgotten to mention in the previous post,
that if I remove the alfa chanel using
tmpBmp.RemoveAlphaChannel( True, clWhite );
and leave PrintingFilterOnSubsampling as it is and do not set it to rfNone.
I still get out of memmory.
Looks like alfa channel is not he problem.

I have also noticed that the problem appears on average PCs.
On powerfull PCs there is no "out of memory" .
By average PCs I mean still preety good ones.
Those same PCs that did't have any problem with printing the same kind of images in Imageen version 6.3.0.


Best regards.
Audax Posted - Mar 04 2022 : 07:27:26
Hi

I've removed the alpha channel.

But now I have another question...
I've decided to remove the print preview and go directly to printing.
So, I used the IO.PrintImage(), but every approach I've tried gave me the same error:

ExceptionMessage="Printer is not currently printing"
ExceptionName="EPrinter"
ExceptionDisplayName="EPrinter"

I even tried one of your sugestions I've found on this forum.
https://www.imageen.com/ieforum/topic.asp?TOPIC_ID=2473&SearchTerms=PrintImage(

with TImageEnView.Create(nil) do
begin
IEBitmap.Assign(ImageEnPrint.IEBitmap);
ImageEnPrint.DrawObjectsToBitmap(IEBitmap);
IO.PrintImage(Printer.Canvas, 0, 0, 0, 0, ievpCenter, iehpCenter, iesNormal);
Free();
end;

It's strange, because the bottom code works just fine and I never get that error.

ImageEnPrint.LayersCurrent:= 0;
tmpBmp:= TIEBitmap.Create(ImageEnPrint.IEBitmap.Width, ImageEnPrint.IEBitmap.Height);

try
tmpBmp.AssignImage(ImageEnPrint.IEBitmap);
tmpBmp.RemoveAlphaChannel( True, clWhite );
ImageEnIO.AttachedIEBitmap:= tmpBmp;

ImageEnPrint.LayersDrawTo(tmpBmp);

if cbxPortrait.Checked then
Printer.Orientation:= poPortrait
else
Printer.Orientation:= poLandscape;

ImageEnIO.PrintPreviewParams.MarginTop := 0;
ImageEnIO.PrintPreviewParams.MarginBottom := 0;
ImageEnIO.PrintPreviewParams.MarginLeft := 0;
ImageEnIO.PrintPreviewParams.MarginRight := 0;

ImageEnIO.DoPrintPreviewDialog;

finally
tmpBmp.Free;
end;

Any idea?

Best regards.
xequte Posted - Mar 03 2022 : 21:12:58
Sorry, I meant PrintImage() rather than DoPrintPreviewDialog().

The main difference between 6.3.0 and 9.2.0, is that printing is now alpha channel aware, so if the image contains an alpha channel, a copy is made of the bitmap.

Can you try removing the alpha channel so it functions the same as v6.3.0?

e.g. tmpBmp.RemoveAlphaChannel( True, clWhite );

https://www.imageen.com/help/TIEBitmap.RemoveAlphaChannel.html


Nigel
Xequte Software
www.imageen.com
Audax Posted - Mar 03 2022 : 08:06:23
Hi

I am not using IO.DoPrintPreviewDialog,
but TPrintDialog/TPrinterSetupDialog (from Vcl.Dialogs) in combination with ImageEnIO.PrintImage.
As written in the first post.

I didn't know that DoPrintPreviewDialog exist, will try it now.

The value of b is True.

Best regards.
xequte Posted - Feb 27 2022 : 14:45:12
Hi

Do you enable the PrintLayers or PrintAnnotations parameters when calling ImageEnView1.IO.DoPrintPreviewDialog()?

Prior to printing, what is the value of "b":

b := (ImageEnView1.IEBitmap.HasAlphaChannel and not ImageEnView1.IEBitmap.AlphaChannel.Full)?

Nigel
Xequte Software
www.imageen.com
Audax Posted - Feb 25 2022 : 05:18:36
Hi,

I've set the PrintingFilterOnSubsampling to rfNone.
It works now, but it seems to me that the quality of the print is not as good as it used to be.

We are printing radiology photos with high resolution and at this point
I don't know which type of printing filter would be best for our purpose.

Do you have any suggestion?


Best regards.
xequte Posted - Feb 10 2022 : 21:23:48
Hi

Does it only fail when printing to "Print to PDF"?

How large is the image?

What is the value of ImageEnPrint.PrintingFilterOnSubsampling? Does changing it affect the issue?

Nigel
Xequte Software
www.imageen.com