pixel on print

pixel on print

Postby Silvio.Falconi » Wed Oct 09, 2024 9: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

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 view  RUN

#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
Silvio.Falconi
 
Posts: 7070
Joined: Thu Oct 18, 2012 7:17 pm

Re: pixel on print

Postby Giovany Vecchi » Wed Oct 09, 2024 4:54 pm

Hi Silvio, Try this way.

Code: Select all  Expand view  RUN
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
Giovany Vecchi
 
Posts: 223
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

Re: pixel on print

Postby Silvio.Falconi » Thu Oct 10, 2024 7:20 am

Giovany Vecchi wrote:Hi Silvio, Try this way.

Code: Select all  Expand view  RUN
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 view  RUN
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: 7070
Joined: Thu Oct 18, 2012 7:17 pm

Re: pixel on print

Postby Silvio.Falconi » Thu Oct 10, 2024 8:25 am

another test

Image



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

Code: Select all  Expand view  RUN
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 view  RUN
#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: 7070
Joined: Thu Oct 18, 2012 7:17 pm

Re: pixel on print

Postby Silvio.Falconi » Thu Oct 10, 2024 9:04 am

Ok I resolve for the numbers

Image

Code: Select all  Expand view  RUN
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: 7070
Joined: Thu Oct 18, 2012 7:17 pm

Re: pixel on print

Postby Silvio.Falconi » Thu Oct 10, 2024 10:58 am

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


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 38 guests