pixel on print

Post Reply
User avatar
Silvio.Falconi
Posts: 7104
Joined: Thu Oct 18, 2012 7:17 pm

pixel on print

Post 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
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 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
User avatar
Giovany Vecchi
Posts: 223
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

Re: pixel on print

Post 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 
 
User avatar
Silvio.Falconi
Posts: 7104
Joined: Thu Oct 18, 2012 7:17 pm

Re: pixel on print

Post 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
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 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
User avatar
Silvio.Falconi
Posts: 7104
Joined: Thu Oct 18, 2012 7:17 pm

Re: pixel on print

Post 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
 
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 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
User avatar
Silvio.Falconi
Posts: 7104
Joined: Thu Oct 18, 2012 7:17 pm

Re: pixel on print

Post 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
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 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
User avatar
Silvio.Falconi
Posts: 7104
Joined: Thu Oct 18, 2012 7:17 pm

Re: pixel on print

Post 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
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 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
Post Reply