Page 1 of 1

pixel on print

Posted: Wed Oct 09, 2024 9:22 am
by Silvio.Falconi
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

Image



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: Select all | Expand

#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

Image

Re: pixel on print

Posted: Wed Oct 09, 2024 4:54 pm
by Giovany Vecchi
Hi Silvio, Try this way.

Code: Select all | Expand

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 
 

Re: pixel on print

Posted: Thu Oct 10, 2024 7:20 am
by Silvio.Falconi
Giovany Vecchi wrote:Hi Silvio, Try this way.

Code: Select all | Expand

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,

Image









If I made

Code: Select all | Expand

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
Image

Re: pixel on print

Posted: Thu Oct 10, 2024 8:25 am
by Silvio.Falconi
another test

Image



I insert a log file to chech if the coordinates are right or not

Code: Select all | Expand

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: Select all | Expand

#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
 

Re: pixel on print

Posted: Thu Oct 10, 2024 9:04 am
by Silvio.Falconi
Ok I resolve for the numbers

Image

Code: Select all | Expand

 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

Image

Re: pixel on print

Posted: Thu Oct 10, 2024 10:58 am
by Silvio.Falconi
with
local nMargineSinistro := 0
local nMargineSuperiore := 0

Image

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


Image



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

there seems to be a miscalculation for the margins