FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour pixel on print
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
pixel on print
Posted: Wed Oct 09, 2024 09:22 AM
I need a procedure that prints pixels above a model
at certain coordinates, the coordinates are expressed in millimeters and are stored in an archive,
the procedure must also calculate the left margin and the top margin
which is also used by the image

I can't center the pixels in the right position, I even asked Open Ai without having satisfactory results





for example for the first 10 boxes the data is the following

number1=Box Numbers Panel 1|3.6|21.4
number2=Box Numbers Panel 2|9.7|21.4
number3=Box Numbers Panel 3|15.8|21.4
number4=Box Numbers Panel 4|21.9|21.4
number5=Box Numbers Panel 5|28.0|21.4
number6=Box Numbers Panel 6|34.1|21.4
number7=Box Numbers Panel 7|40.2|21.4
number8=Box Numbers Panel 8|46.3|21.4
number9=Panel numbers box 9|52.4|21.4
number10=Panel numbers box 10|58.5|21.4

to be clear the first pixel must be positioned on the x,y coordinate 3.6 21.4

the pixel can have a width of 2 mm

The horizontal distance between pixels must be 6.1mm and the vertical distance 5.9mm


test to try
Code (fw): Select all Collapse
#include "fivewin.ch"

FUNCTION StampaPixel()
    LOCAL aDati := { ;
        {"Pannello numeri casella 1", 3.6, 21.4}, ;
        {"Pannello numeri casella 2", 9.7, 21.4}, ;
        {"Pannello numeri casella 3", 15.8, 21.4}, ;
        {"Pannello numeri casella 4", 21.9, 21.4}, ;
        {"Pannello numeri casella 5", 28.0, 21.4}, ;
        {"Pannello numeri casella 6", 34.1, 21.4}, ;
        {"Pannello numeri casella 7", 40.2, 21.4}, ;
        {"Pannello numeri casella 8", 46.3, 21.4}, ;
        {"Pannello numeri casella 9", 52.4, 21.4}, ;
        {"Pannello numeri casella 10", 58.5, 21.4}, ;
        {"Pannello numeri casella 11", 3.6, 27.3}, ;
        {"Pannello numeri casella 12", 9.7, 27.3}, ;
        {"Pannello numeri casella 13", 15.8, 27.3}, ;
        {"Pannello numeri casella 14", 21.9, 27.3}, ;
        {"Pannello numeri casella 15", 28.0, 27.3}, ;
        {"Pannello numeri casella 16", 34.1, 27.3}, ;
        {"Pannello numeri casella 17", 40.2, 27.3}, ;
        {"Pannello numeri casella 18", 46.3, 27.3}, ;
        {"Pannello numeri casella 19", 52.4, 27.3}, ;
        {"Pannello numeri casella 20", 58.5, 27.3} ;
    }

    LOCAL nMargineSinistro := 10, ; // Margine sinistro per l'immagine
          nMargineSuperiore := 10, ; // Margine superiore per l'immagine
          nOffsetY := 5.9, ; // Offset verticale per i quadratini
          nOffsetX := 6.1, ; // Offset orizzontale per i quadratini
          nPixelLarghezza := 2, ; // Larghezza del pixel in mm
          nPixelAltezza := 2, ; // Altezza del pixel in mm
          nX, nY, oBrush, aRect, n
    LOCAL oPrn

    // Definisci il pennello per il pixel
    DEFINE BRUSH oBrush COLOR CLR_BLACK

    // Inizio della stampa con anteprima
    PRINT oPrn PREVIEW

    PAGE

        // Stampa l'immagine di sfondo (se necessaria)
        PrintImage(0.3, 0.33, 9.8, 21, ".\bitmaps\schedina2.jpg", nMargineSuperiore, nMargineSinistro, oPrn)

        // Ciclo attraverso i dati per stampare i pixel
        FOR n := 1 TO LEN(aDati)
            nX := (aDati[n][2] * 10) + nMargineSinistro + (nOffsetX * (n - 1)) // Posiziona il pixel in base alla coordinata X originale
            nY := (aDati[n][3] * 10) + nMargineSuperiore + (nOffsetY * (IF(n <= 10, 0, 1))) // Aggiunge l'offset Y in base alla riga

            // Crea un rettangolo da riempire
            aRect := { nY, nX, nY + (nPixelAltezza * 10), nX + (nPixelLarghezza * 10) }

            // Disegna il rettangolo (pixel)
            oPrn:FillRect(aRect, oBrush)
        NEXT

    ENDPAGE
    ENDPRINT

RETURN NIL

FUNCTION PrintImage(nTop, nLeft, nRight, nBottom, cFile, nMargineSuperiore, nMargineSinistro, oPrn)
    LOCAL lStretch := .f.
    LOCAL nAlpha := 0
    LOCAL lTransp := .f.
    LOCAL lGray := .f.

    // Usa l'oggetto di stampa già presente
    oPrn:Cmtr2Pix(@nTop, @nLeft)
    oPrn:Cmtr2Pix(@nBottom, @nRight)
    oPrn:SayImage(nTop + nMargineSuperiore, nLeft + nMargineSinistro, cFile, nRight, nBottom)

    RETURN NIL

schedina.jpg to insert on .\bitmaps\ folder

Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 244
Joined: Mon Jun 05, 2006 09:39 PM
Re: pixel on print
Posted: Wed Oct 09, 2024 04:54 PM
Hi Silvio, Try this way.
Code (fw): Select all Collapse
PRINT oPrn PREVIEW
   nOffsetY := oPrn:nlogpixely()/2.54     // Offset verticale per i quadratini
   nOffsetX := oPrn:nlogpixelx()/2.54     // Offset orizzontale per i quadratini
   nPixelLarghezza := nOffsetX            // Larghezza del pixel in mm
   nPixelAltezza := nOffsetY              // Altezza del pixel in mm
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: pixel on print
Posted: Thu Oct 10, 2024 07:20 AM
Giovany Vecchi wrote:Hi Silvio, Try this way.
Code (fw): Select all Collapse
PRINT oPrn PREVIEW
   nOffsetY := oPrn:nlogpixely()/2.54     // Offset verticale per i quadratini
   nOffsetX := oPrn:nlogpixelx()/2.54     // Offset orizzontale per i quadratini
   nPixelLarghezza := nOffsetX            // Larghezza del pixel in mm
   nPixelAltezza := nOffsetY              // Altezza del pixel in mm

Giovany,











If I made

Code (fw): Select all Collapse
nOffsetY := oPrn:nlogpixely()/72     // Offset verticale per i quadratini
   nOffsetX := oPrn:nlogpixelx()/72     // Offset orizzontale per i quadratini
   nPixelLarghezza := nOffsetX            // Larghezza del pixel in mm
   nPixelAltezza := nOffsetY              // Altezza del pixel in mm
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: pixel on print
Posted: Thu Oct 10, 2024 08:25 AM
another test





I insert a log file to chech if the coordinates are right or not
Code (fw): Select all Collapse
10/10/24 10:21:39: Posizione originale:  3.6, 21.4, X = 36.0, Y = 214.0 
10/10/24 10:21:39: Posizione originale:  9.7, 21.4, X = 97.0, Y = 214.0 
10/10/24 10:21:39: Posizione originale: 15.8, 21.4, X = 158.0, Y = 214.0    
10/10/24 10:21:39: Posizione originale: 21.9, 21.4, X = 219.0, Y = 214.0    
10/10/24 10:21:39: Posizione originale: 28.0, 21.4, X = 280.0, Y = 214.0    
10/10/24 10:21:39: Posizione originale: 34.1, 21.4, X = 341.0, Y = 214.0    
10/10/24 10:21:39: Posizione originale: 40.2, 21.4, X = 402.0, Y = 214.0    
10/10/24 10:21:39: Posizione originale: 46.3, 21.4, X = 463.0, Y = 214.0    
10/10/24 10:21:39: Posizione originale: 52.4, 21.4, X = 524.0, Y = 214.0    
10/10/24 10:21:39: Posizione originale: 58.5, 21.4, X = 585.0, Y = 214.0    
10/10/24 10:21:39: Posizione originale:  3.6, 27.3, X = 36.0, Y = 273.0 
10/10/24 10:21:39: Posizione originale:  9.7, 27.3, X = 97.0, Y = 273.0 
10/10/24 10:21:39: Posizione originale: 15.8, 27.3, X = 158.0, Y = 273.0    
10/10/24 10:21:39: Posizione originale: 21.9, 27.3, X = 219.0, Y = 273.0    
10/10/24 10:21:39: Posizione originale: 28.0, 27.3, X = 280.0, Y = 273.0    
10/10/24 10:21:39: Posizione originale: 34.1, 27.3, X = 341.0, Y = 273.0    
10/10/24 10:21:39: Posizione originale: 40.2, 27.3, X = 402.0, Y = 273.0    
10/10/24 10:21:39: Posizione originale: 46.3, 27.3, X = 463.0, Y = 273.0    
10/10/24 10:21:39: Posizione originale: 52.4, 27.3, X = 524.0, Y = 273.0    
10/10/24 10:21:39: Posizione originale: 58.5, 27.3, X = 585.0, Y = 273.0

the procedure calc good the values (x and y) but then insert space from a pixel to another



Code (fw): Select all Collapse
#include "fivewin.ch"

FUNCTION StampaPixel()
    LOCAL aDati := { ;
        {"Pannello numeri casella 1", 3.6, 21.4}, ;
        {"Pannello numeri casella 2", 9.7, 21.4}, ;
        {"Pannello numeri casella 3", 15.8, 21.4}, ;
        {"Pannello numeri casella 4", 21.9, 21.4}, ;
        {"Pannello numeri casella 5", 28.0, 21.4}, ;
        {"Pannello numeri casella 6", 34.1, 21.4}, ;
        {"Pannello numeri casella 7", 40.2, 21.4}, ;
        {"Pannello numeri casella 8", 46.3, 21.4}, ;
        {"Pannello numeri casella 9", 52.4, 21.4}, ;
        {"Pannello numeri casella 10", 58.5, 21.4}, ;
        {"Pannello numeri casella 11", 3.6, 27.3}, ;
        {"Pannello numeri casella 12", 9.7, 27.3}, ;
        {"Pannello numeri casella 13", 15.8, 27.3}, ;
        {"Pannello numeri casella 14", 21.9, 27.3}, ;
        {"Pannello numeri casella 15", 28.0, 27.3}, ;
        {"Pannello numeri casella 16", 34.1, 27.3}, ;
        {"Pannello numeri casella 17", 40.2, 27.3}, ;
        {"Pannello numeri casella 18", 46.3, 27.3}, ;
        {"Pannello numeri casella 19", 52.4, 27.3}, ;
        {"Pannello numeri casella 20", 58.5, 27.3} ;
    }

    LOCAL oPrn
    LOCAL nMargineSinistro := 0, ;  // Margine sinistro per l'immagine
          nMargineSuperiore := 0, ; // Margine superiore per l'immagine
          nOffsetY, ; // Offset verticale per i quadratini
          nPixelLarghezza, ; // Larghezza del pixel in mm
          nPixelAltezza, ; // Altezza del pixel in mm
          nX, nY, oBrush, aRect

    // Definisci il pennello per il pixel
    DEFINE BRUSH oBrush COLOR CLR_BLACK

    // Inizio della stampa con anteprima
    PRINT oPrn PREVIEW

    nOffsetY := oPrn:nlogpixely() / 72     
    nOffsetX := oPrn:nlogpixelx() / 72     
    nPixelLarghezza := nOffsetX            
    nPixelAltezza := nOffsetY              

    PAGE

        // Stampa l'immagine di sfondo (se necessaria)
        PrintImage(0.3, 0.33, 9.8, 21, ".\bitmaps\schedina2.jpg", nMargineSuperiore, nMargineSinistro, oPrn)

        // Ciclo attraverso i dati per stampare i pixel
        FOR n := 1 TO LEN(aDati)
            // Posizionamento X e Y
            nX := (aDati[n][2] * 10) + nMargineSinistro // Solo il valore X con margine
            nY := (aDati[n][3] * 10) + nMargineSuperiore // Solo il valore Y con margine

            // Log dei valori nel formato richiesto
            LogFile("silvio.txt", {"Posizione originale: " + STR(aDati[n][2], 4, 1) + ", " + STR(aDati[n][3], 4, 1) + ", X = " + LTRIM(STR(nX)) + ", Y = " + LTRIM(STR(nY))})

            // Crea un rettangolo da riempire
            aRect := { nY, nX, nY + (nPixelAltezza * 10), nX + (nPixelLarghezza * 10) }

            // Disegna il rettangolo (pixel)
            oPrn:FillRect(aRect, oBrush)
        NEXT

    ENDPAGE
    ENDPRINT

RETURN NIL

FUNCTION PrintImage(nTop, nLeft, nRight, nBottom, cFile, nMargineSuperiore, nMargineSinistro, oPrn)
    LOCAL lStretch := .f.
    LOCAL nAlpha := 0
    LOCAL lTransp := .f.
    LOCAL lGray := .f.

    // Usa l'oggetto di stampa già presente
    oPrn:Cmtr2Pix(@nTop, @nLeft)
    oPrn:Cmtr2Pix(@nBottom, @nRight)
    oPrn:SayImage(nTop + nMargineSuperiore, nLeft + nMargineSinistro, cFile, nRight, nBottom)

    RETURN NIL
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: pixel on print
Posted: Thu Oct 10, 2024 09:04 AM
Ok I resolve for the numbers


Code (fw): Select all Collapse
 nX := (aDati[n][2]) + nMargineSinistro + 7 + nSpazioX
            nY := (aDati[n][3]) + nMargineSuperiore + 7 +nSpazioY
            oPrn:Mmtr2Pix(@nX, @nY)

But if change the margins it move all

Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: pixel on print
Posted: Thu Oct 10, 2024 10:58 AM
with
local nMargineSinistro := 0
local nMargineSuperiore := 0



If I change the left margin and the top margin the procedure print bad

to print thepixel I use the function oPrn:Mmtr2Pix(@nX, @nY)

If I have

local nMargineSinistro := 226
local nMargineSuperiore := 590

I must convert it into Pix or not ?

If I assign

local nMargineSinistro := 226
local nMargineSuperiore := 590

the image is moved and printed

if at the time of printing the pixels I assign these values


nX := (aDatiNumeri[n][2]) + (nMargineSinistro-198) + 7 + nSpazioX
nY := (aDatiNumeri[n][3]) + (nMargineSuperiore-515) + 7 + nSpazioY






but I found the values ​​198 and 515 by chance by trying and trying again

there seems to be a miscalculation for the margins
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com

Continue the discussion