Printing an image.

Printing an image.

Postby HunterEC » Thu Aug 25, 2016 7:10 pm

Guys:

How can I print an image in 8.5" x 11" size (letter) ?
Code: Select all  Expand view
     oImg1:Print( , , , 06 )
 


I know that the
Code: Select all  Expand view
oImg1:Print( , , , n )
method prints the image and sizes it according to n. This requires a trial and error process. Can it be done in just one try ?


Thank you very much !
HunterEC
 
Posts: 723
Joined: Tue Sep 04, 2007 8:45 am

Re: Printing an image.

Postby nageswaragunupudi » Thu Aug 25, 2016 9:23 pm

Please try
Code: Select all  Expand view
function PrnImage

   local oPrn
   local cImage   := "c:\fwh\bitmaps\olga1.jpg"

   PRINT oPrn PREVIEW
   PAGE

   @ 1, 1 PRINT TO oPrn IMAGE cImage SIZE 7,9 INCHES NOTRANSPARENT STRETCH

   ENDPAGE
   ENDPRINT

return nil
 


Image
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10283
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Printing an image.

Postby HunterEC » Fri Aug 26, 2016 6:01 am

Rao:

Thank you very much for your response, however I'm getting the following compilation error:
Code: Select all  Expand view
Error E0030  Syntax error "syntax error at '@'"


Offending line:
Code: Select all  Expand view
@ 1, 1 PRINT TO oPrn IMAGE cImage SIZE 7,9 INCHES NOTRANSPARENT STRETCH



I'm using FW 16.03, any ideas ?


Thank you very much !
HunterEC
 
Posts: 723
Joined: Tue Sep 04, 2007 8:45 am

Re: Printing an image.

Postby nageswaragunupudi » Fri Aug 26, 2016 6:39 am

FWH 16.03: Please use the method:

PrintImage( nRow, nCol, cImage, nWidth, nHeight, lStretch, nAlpha, lTransp, lGray ) // All units in pixels

Ex:
oPrn:PrintImage( 100,100, "c:\fwh\bitmaps\olga1.jpg", 5000,7000 )
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10283
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Printing an image.

Postby HunterEC » Fri Aug 26, 2016 7:42 am

Rao:

Thank you for your help. How can I find out the pixel size of the full image and how many pixels does an 8.5" x 11" page has ?
Thank you very much my friend.
HunterEC
 
Posts: 723
Joined: Tue Sep 04, 2007 8:45 am

Re: Printing an image.

Postby ukoenig » Fri Aug 26, 2016 4:41 pm

Gustavo,

The Image is adjusted to a given page-area.
Using small images there is a zoom-factor

look at Your post :
viewtopic.php?f=3&t=32880&p=193508#p193508

regards
Uwe :D
Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
User avatar
ukoenig
 
Posts: 4043
Joined: Wed Dec 19, 2007 6:40 pm
Location: Germany

Re: Printing an image.

Postby Antonio Linares » Fri Aug 26, 2016 10:14 pm

Gustavo,

> How can I find out the pixel size of the full image

oImage:nWidth() and oImage:nHeight()
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41351
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Printing an image.

Postby Antonio Linares » Fri Aug 26, 2016 10:18 pm

> how many pixels does an 8.5" x 11" page

http://www.unitconversion.org/typography/inchs-to-pixels-y-conversion.html

See CLASS TPrinter METHOD Inch2Pix( nRow, nCol )
Code: Select all  Expand view
METHOD Inch2Pix( nRow, nCol ) CLASS TPrinter

   nRow = Max( 0, ( nRow * ::nVertRes() / (::nVertSize() / 25.4 ))-::nYoffset )
   nCol = Max( 0, ( nCol * ::nHorzRes() / (::nHorzSize() / 25.4 ))-::nXoffset )

return { nRow, nCol }
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41351
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Printing an image.

Postby ukoenig » Wed Sep 07, 2016 5:04 pm

Antonio,

I created a easy to use File-label-section, my customer asked for.
Once the values are defined, only different text is needed.

the paper orientation is landscape
7 labels can be printed
The text-rows, the distance from left to the 1. label and the label-width is defined
The calculation to center the text works fine but the calculation ( pixel ) to center the images doesn*t work for any reason
and I had to use fixed tested values.

nRow = Max( 0, ( nRow * ::nVertRes() / (::nVertSize() / 25.4 ))-::nYoffset )
nCol = Max( 0, ( nCol * ::nHorzRes() / (::nHorzSize() / 25.4 ))-::nXoffset )


I will check :

// SizeInch2Pix is for converting width and height
METHOD SizeInch2Pix( nHeight, nWidth ) CLASS TPrinter
DEFAULT nWidth := 0, nHeight := 0
if nHeight <> 0
nHeight := Max( 0, ( nHeight * ::nVertRes() / ( ::nVertSize() / 25.4 ) ) )
endif
if nWidth <> 0
nWidth := Max( 0, ( nWidth * ::nHorzRes() / ( ::nHorzSize() / 25.4 ) ) )
endif
return { nWidth, nHeight }

defined values :

1. text-row = aODat[64]
left border to the 1. label = aODat[65]
2. text-row = aODat[66]
3. text-row = aODat[67]
4. text-row = aODat[68]
5. text-row = aODat[69]
label-width = aODat[70] // labels next to each other )
text centered YES / NO = aODat[74] ( images are allways shown centerd )
image YES / NO = aODat[75]
Image-top = aODat[76]
Image-size = aODat[77]

nILeft := 260 // used a fixed value

tested left border + dlabel-distance / 2 to calculate the center of the 1. label

nILeft := Max( 0, ( aODat[65] * oPRINT:nHorzRes() / (oPRINT:nHorzSize() / 25.4 )) - oPRINT:nXoffset ) + ; // left distance
Max( 0, ( ( aODat[70] * oPRINT:nHorzRes() / (oPRINT:nHorzSize() / 25.4 )) - oPRINT:nXoffset ) / 2 ) // label center

INPUT

Image

PRINTPREVIEW

Image

Image

could the centered image-position be calculated ?

best regards
uwe :?:
Last edited by ukoenig on Thu Sep 08, 2016 2:12 pm, edited 1 time in total.
Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
User avatar
ukoenig
 
Posts: 4043
Joined: Wed Dec 19, 2007 6:40 pm
Location: Germany

Re: Printing an image.

Postby Antonio Linares » Thu Sep 08, 2016 6:53 am

Uwe,

> but the calculation ( pixel ) to center the images doesn*t work for any reason

How are you painting them ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41351
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Printing an image.

Postby ukoenig » Thu Sep 08, 2016 2:00 pm

Antonio,

the complete print-function
I can use it, to create a standalone sample

The final result of the calculations ( text works fine )
( I still have to check the 1. image start-position < money.bmp > )

Image

NOT the same size :

// Text-labelwidth OK
nLablWidth := aODat[70]

// Image-labelwidth to long
nImgWidth := Max( 0, ( aODat[70] * oPRINT:nHorzRes() / (oPRINT:nHorzSize() / 25.4 )) - oPRINT:nXoffset )


Code: Select all  Expand view

FUNCTION P_REPORT4( oMeter, oText, oDlg )
LOCAL aPoint
LOCAL oPRINT, oFont1, oFont2, oFont3, oPen1
LOCAL nLinI, nColI, nLinF, nColF
LOCAL nLablBord, nLablWidth, nImgTop, nImgBord, nImgWidth, nImgCent  
LOCAL I := 1, nTextLeft[7], nImgLeft, nTextPos

PRINTER oPRINT ; // FROM USER  ;
PREVIEW  MODAL ;
NAME "Patientenliste drucken"

IF EMPTY( oPRINT:hDC )
      MsgStop ( "Drucker nicht bereit !" )
      RETURN(.f.)
ENDIF
IF aVal[180] = 2     // fix for report thumbnails
    TPreview():lListViewHide := .T.
ENDIF

DEFINE FONT oFont1 NAME "Arial" SIZE 0, -18 BOLD OF oPRINT
DEFINE FONT oFont2 NAME "Arial" SIZE 0, -18 OF oPRINT
DEFINE FONT oFont3 NAME "Arial" SIZE 0, -14 BOLD OF oPRINT

DEFINE PEN oPen1 WIDTH 12 OF oPRINT

// ----- TEXT ----------

// defined  0.5
nLablBord       := aODat[65]

// defined 4.1
nLablWidth  := aODat[70]

// start with left space
nTextPos        := nLablBord

// ----- IMAGE ( pixel ) --------

// defined 7.2 to be calculated to pixel
nImgTop     := Max( 0, ( ( aODat[76] ) * oPRINT:nVertRes() / (oPRINT:nVertSize() / 25.4 )) - oPRINT:nYoffset )

// defined 0.5 to be calculated to pixel
nImgBord        := Max( 0, ( aODat[65] * oPRINT:nHorzRes() / (oPRINT:nHorzSize() / 25.4 )) - oPRINT:nXoffset )

// defined 4.1 to be calculated to pixel
nImgWidth       := Max( 0, ( aODat[70] * oPRINT:nHorzRes() / (oPRINT:nHorzSize() / 25.4 )) - oPRINT:nXoffset )

// defined 1. image-center
nImgCent        := nImgBord + ( nImgWidth / 2 ) 

I := 1
FOR I := 1 TO 7
    nTextLeft[I] := nLablBord
NEXT

oPRINT:SetPage(9)   //  A4
IF aODat[72] = .T.
    oPRINT:SetPortrait()         
ELSE
    oPRINT:SetLandscape()   
ENDIF

PAGE

    I := 1
    X := 8

    FOR I := 1 TO 7 // define var-start-values of 7 labels
        IF I = 2
            X := 17 ( array-positions )
        ELSEIF I = 3
            X := 26
        ELSEIF I = 4
            X := 35
        ELSEIF I = 5
            X := 44
        ELSEIF I = 6
            X := 53
        ELSEIF I = 7
            X := 62
        ENDIF
        // add label-width to position
        nTextPos += nLablWidth

        // add label-width to position ( pixel ) after 1. loop
        IF I > 1
            nImgCent += nImgWidth / 2          
        ENDIF

        // define if text-centered
        IF aODat[74] = .T.
            // Left textposition if centered ( Label-width - Text- width )
            nTextLeft[1] := nLablWidth  - ( aODat[70] - oPRINT:CmtrGetTextWidth( TRIM(aODat[X-7]), oFont1 ) ) / 2
            nTextLeft[2] := nLablWidth  - ( aODat[70] - oPRINT:CmtrGetTextWidth( TRIM(aODat[X-6]), oFont2 ) ) / 2
            nTextLeft[3] := nLablWidth  - ( aODat[70] - oPRINT:CmtrGetTextWidth( TRIM(DTOC(aODat[X-5])),oFont2 ) ) / 2   
            nTextLeft[4] := nLablWidth  - ( aODat[70] - oPRINT:CmtrGetTextWidth( TRIM(aODat[X-4]), oFont2 ) ) / 2
            nTextLeft[5] := nLablWidth  - ( aODat[70] - oPRINT:CmtrGetTextWidth( TRIM(aODat[X-3]), oFont3 ) ) / 2
            nTextLeft[6] := nLablWidth  - ( aODat[70] - oPRINT:CmtrGetTextWidth( TRIM(aODat[X-2]), oFont3 ) ) / 2
            nTextLeft[7] := nLablWidth  - ( aODat[70] - oPRINT:CmtrGetTextWidth( TRIM(aODat[X-1]), oFont3 ) ) / 2
        ENDIF

        IF aODat[X] = .T. // selected label

            oPRINT:cmSay(   aODat[64],          nTextPos - nTextLeft[1], aODat[X-7],        oFont1,,CLR_BLACK,,PAD_LEFT  )  // 1
            oPRINT:cmSay(aODat[66],         nTextPos - nTextLeft[2], aODat[X-6],        oFont2,,CLR_BLACK,,PAD_LEFT  )  // 2

            IF aODat[71] = .T. // select line-painting           
                nFil := aODat[64] + 1.0 // Top
                nCol :=  nLeft          // Left
                nTop := aODat[64] + 1.0 // Top  
                nBot := nLeft + 3.5     // Right
                aCoord1 := oPRINT:Cmtr2Pix( @nFil, @nCol )
                aCoord2 := oPRINT:Cmtr2Pix( @nTop, @nBot )
                oPRINT:Line ( nFil, nCol, nTop, nBot, oPen1 )        
            ENDIF   

            IF aODat[73] = .F. // print with date

                oPRINT:cmSay(aODat[67],     nTextPos - nTextLeft[3], TRIM(DTOC(aODat[X-5])),oFont2,,CLR_BLACK,,PAD_LEFT  )  // 3
                oPRINT:cmSay(aODat[68],     nTextPos - nTextLeft[4], aODat[X-4],        oFont2,,CLR_BLACK,,PAD_LEFT  )  // 4
                oPRINT:cmSay(aODat[69],     nTextPos - nTextLeft[5], aODat[X-3],        oFont3,,CLR_BLACK,,PAD_LEFT  )  // 5
                oPRINT:cmSay(aODat[69] + 0.8,   nTextPos - nTextLeft[6], aODat[X-2],        oFont3,,CLR_BLACK,,PAD_LEFT  )  // 6
                oPRINT:cmSay(aODat[69] + 1.6,   nTextPos - nTextLeft[7], aODat[X-1],        oFont3,,CLR_BLACK,,PAD_LEFT  )  // 7
           
            ELSE  // NO date

                oPRINT:cmSay(aODat[67],     nTextPos - nTextLeft[4], aODat[X-4],        oFont2,,CLR_BLACK,,PAD_LEFT  )
                oPRINT:cmSay(aODat[68],     nTextPos - nTextLeft[5], aODat[X-3],        oFont3,,CLR_BLACK,,PAD_LEFT  )
                oPRINT:cmSay(aODat[68] + 0.8,   nTextPos - nTextLeft[6], aODat[X-2],        oFont3,,CLR_BLACK,,PAD_LEFT  )
                oPRINT:cmSay(aODat[68] + 1.6,   nTextPos - nTextLeft[7], aODat[X-1],        oFont3,,CLR_BLACK,,PAD_LEFT  )
           
            ENDIF
   
            // ---------------- IMAGE ---------

            IF aODat[75] = .T. // print nImgCent - ( image-sze / 2 )
                IF aODat[77] = 500 // defined image-sizes
                    nImgLeft := nImgCent - 250 // 50 % minus
                ENDIF
                IF aODat[77] = 600
                    nImgLeft := nImgCent - 300  
                ENDIF
                IF aODat[77] = 700
                    nImgLeft := nImgCent - 350  
                ENDIF
                IF aODat[77] = 800
                    nImgLeft := nImgCent - 400  
                ENDIF
                //           PrintImage( nRow,          nCol,     uImage, image-name     nWidth,     nHeight,   lStretch, nAlpha, lTransp, lGray )
                oPRINT:PrintImage( nImgTop,    nImgLeft, c_Pfad1 + aODat[X+1], aODat[77], aODat[77], .T.) // 9
            ENDIF

        ENDIF

    NEXT
 
ENDPAGE

ENDPRINT

oFont1:End()
oFont2:End()
oFont3:End()

RETURN( NIL )
 


regards
Uwe :?
Last edited by ukoenig on Sun Sep 18, 2016 3:33 pm, edited 1 time in total.
Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
User avatar
ukoenig
 
Posts: 4043
Joined: Wed Dec 19, 2007 6:40 pm
Location: Germany

Re: Printing an image.

Postby ukoenig » Sun Sep 18, 2016 3:32 pm

More tests trying to CALCULATE images centered

I tested the different functions of class PRINTER

before I added the needed values to center the images
on 7, 9 and 4 label-solutions
but impossible to convert the text-values to pixel-values
NO function returns the needed values

how to calculate the text-values to pixel ?

Text---to---Pixel ( used fixed tested values )
3.8----------896 ( needed results for image-distance )
3.1----------730
6.0----------1420

I created a extra image to adjust to centered

Image

Code: Select all  Expand view

IF nStyle = 7 // Labels
   nILablWidth := 896  
   //          Text =>   1.6          3.8
   //                   nLablBord + ( nILablWidth / 2 ) - ( Imagesize / 2 )
   nImgLeft          := 310     +     448               -    aODat[99] / 2 // Pixel centered  
ENDIF
IF nStyle = 9 // Labels
   nILablWidth := 730
   //         Text =>   1.0           3.1
   //                  nLablBord + ( nILablWidth / 2 ) - ( Imagesize / 2 )
   nImgLeft         := 170     +     365               -   aODat[99] / 2 // Pixel centered  
ENDIF
IF nStyle = 4 // Labels
   nILablWidth := 1420
   //        Text =>   3.0           6.0
   //                 nLablBord + ( nILablWidth / 2 ) - ( Imagesize / 2 )
   nImgLeft        := 630     +     710               -   aODat[99] / 2 // Pixel centered  
ENDIF
 
Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
User avatar
ukoenig
 
Posts: 4043
Joined: Wed Dec 19, 2007 6:40 pm
Location: Germany

Re: Printing an image.

Postby nageswaragunupudi » Sun Sep 18, 2016 4:46 pm

TPrinter object methods SayText() and PrintImage() automatically do all the calculations and center text (or multiline text) and images within given rectangle. Not only center, they can also optionally align the text/image to any of the 8 sides (4 sides and 4 corners of the given rectangle optionally. In the recent versions we can specify any units for the rectangle. There are also commands which make calling these methods easy.

If you still want to do all these calculations yourself, it is upto you.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10283
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Printing an image.

Postby ukoenig » Sun Sep 18, 2016 6:03 pm

Mr. Rao

all values are defined to print the text on a selected position
The image-positions ( values ) must be calculated in relation to the textposition
because printing images, pixel-values are needed.

regards
Uwe :?:
Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
User avatar
ukoenig
 
Posts: 4043
Joined: Wed Dec 19, 2007 6:40 pm
Location: Germany

Re: Printing an image.

Postby ukoenig » Mon Sep 19, 2016 9:06 am

I got it working with all needed calculations to adjust the image-pos to lines or text-positions :D
The image-positions can be adjusted to any margins lines and text.
This sample calculates everything CENTERED to A4 Landscape ( NO margin used )

Image

Image

// The A4 size print measures = 21.0 x 29.7cm, 8.27 x 11.69 inches

oPRINT:SetPage(9)
oPRINT:SetLandscape()
DEFINE FONT oFont1 NAME "Arial" SIZE 0, -26 BOLD OF oPRINT
DEFINE PEN oPen1 WIDTH 12 OF oPRINT


// Horizontal line centered
// -----------------------------
nRow := 10.5 // Top of horizontal line
nCol := 0 // Left
nTop := 10.5 // Top = 0.5 * A4-width ( 21.0 )
nBot := 29.7 // Right = A4-height ( 29.7 )
aCoord1 := oPRINT:Cmtr2Pix( @nRow, @nCol )
aCoord2 := oPRINT:Cmtr2Pix( @nTop, @nBot )


oPRINT:Line ( nRow, nCol, nTop, nBot, oPen1 )

// Vertical line centered
// --------------------------
nRow := 0 // Top of vertical line
nCol := 14.85 // Left = 0.5 * A4-height ( 29.7 )
nTop := 21.0 // Top = A4-width ( 21.0 )
nBot := 14.85 // Right = 0.5 * A4-height ( 29.7 )
aCoord1 := oPRINT:Cmtr2Pix( @nRow, @nCol )
aCoord2 := oPRINT:Cmtr2Pix( @nTop, @nBot )


oPRINT:Line ( nRow, nCol, nTop, nBot, oPen1 )

// Text centered with Text-top-adjustment
// ------------------------------------------------------
// 1 millimeter = 2.834645669291 point ( needed to calculate font-top )
nTextCentH := oPRINT:CmtrGetTextWidth( "AAA", oFont1 ) * 0.5 // 0.5 * textwidth
nFontHeight := oFont1:nHeight // points
// CmSay( nRow, nCol, cText, oFont, nWidth, nClrText, nBkMode, nPad, lO2A )


oPRINT:cmSay( 10.5 - oFont1:nHeight * 0.002834645669291, 14.85 - nTextCentH, "AAA", oFont1,,CLR_BLACK,,PAD_LEFT )
// MsgAlert( oFont1:nHeight, "Fontheight (216.67 points)" )

// Image centered using < Cmtr2Pix > to convert image-TOP / LEFT to pixel
// -------------------------------------------------------------------------------------------
nImgSize := 800
nRow := 10.5 // Top = 0.5 * A4-width
nCol := 14.85 // Left = 0.5 * A4-height
aCoord1 := oPRINT:Cmtr2Pix( @nRow, @nCol )
// PrintImage( nRow, nCol, uImage, nWidth, nHeight, lStretch, nAlpha, lTransp, lGray )


oPRINT:PrintImage( nRow - nImgSize / 2, nCol - nImgSize / 2, c_Pfad1 + "Test.bmp", nImgSize, nImgSize, .T.)

regards
Uwe :D
Since 1995 ( the first release of FW 1.9 )
i work with FW.
If you have any questions about special functions, maybe i can help.
User avatar
ukoenig
 
Posts: 4043
Joined: Wed Dec 19, 2007 6:40 pm
Location: Germany

Next

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 31 guests