Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Io sono aperto a tutti i suggerimenti.
La ragione dei due rettangoli sovrapposti per creare la L rovesciata era per semplificare, per descrivere il rettangolo dichiariamo l'angolo in alto a sinistra , e questo cambia , l'angolo inferiore destro , e questo è lo stesso per i due rettangoli e le due dimensioni .
Creare la L in altra maniera , mi sembrava più complicato , e comunque sempre 2 rettangoli bisogna creare .
L'unico valore costante è la larghezza del primo rettangolo , quella è fissa , ma tutti gli altri valori possono cambiare.
Però , facendo la modifica "Dim ind As UInt32 = colonna + riga * bmpData.Stride" adesso non va bene , mi perdo completamente lo sfondo bianco .
La L rovesciata ora è grande come tutta la grafica , ma non deve essere così .
Esatto, i valori li modifichi a piacere, se ti resta comodo sovrascrivere i rettangoli, ed il tempo impiegato ti va bene, OK.
Se l'immagine è mooolto grande disegnado due rettangoli uno orizzontale e uno verticale attaccati, scrivi molti meno byte e il tempo diminuisce.
Queste scelte non modificano le stesura del codice che è sempre buono.
Non ho capito bene cosa volevi disegnare, ho aggiunto un Case 4 che disegna una elle rovesciata a partire da coordinate mie di fantasia, fino al bordo destro fineW e alta come il valore da te calcolato in fineH, naturalmente i valori li puoi anche passare con delle variabili modificabili dall'utente:
Codice sorgente - presumibilmente VB.NET
PrivateSub Form1_Load(sender AsObject, e As EventArgs)HandlesMyBase.Load
' Valori impostabili
Dim larghezzamm = 1000
Dim altezzamm = 2000
Dim framemm = 65
Dim gapmm = 5
Dim mmpixel = 14.17
Dim nteste = 1
Dim larghezzapixel = Math.Truncate(larghezzamm * mmpixel)-1'converto le dimensioni del pannello da mm a pixel
Dim altezzapixel = Math.Truncate(altezzamm * mmpixel)- 1
Dim framepixel = Math.Truncate(framemm * mmpixel)- 1
Dim gappixel = Math.Truncate(gapmm * mmpixel)- 1
Dim frontestampa =(1000 * nteste)- 1
Dim origineH, origineW, fineH, fineW AsDouble
Dim nome AsString=""
fineW = frontestampa
' una volta definiti i valori l'immagine non cambierà più in dimensioni
Dim immagine AsNew Bitmap(fineW, altezzapixel - frontestampa, Imaging.PixelFormat.Format4bppIndexed)
immagine.SetResolution(360, 360)
' creo una palette con 8 livelli di grigio invertita
Dim palette As Imaging.ColorPalette= immagine.Palette
For i = 0 To palette.Entries.Length- 1
If i > 7 Then
palette.Entries(i)= Color.White
Else
palette.Entries(i)= Color.FromArgb(255 - i * 36.4, 255 - i * 36.4, 255 - i * 36.4)
EndIf
Next i
' associo la palette creata alla bitmap 4bpp,
' i valori 0...7 ora corrispondono alla scala dal bianco al nero
immagine.Palette= palette
Dim area As Rectangle =New Rectangle(0, 0, immagine.Width, immagine.Height)' area di lavoro LockBits
Dim bmpData As Imaging.BitmapData=Nothing' conterrà i dati della bitmap
Dim ptr As IntPtr ' conterrà l'indirizzo di memoria
Dim bytes AsInteger' conterrà la dimensione del vettore
Dim colorValues()AsByte=Nothing' conterrà il vettore
' ad ogni case, il vettore e la bitmap vengono reinizializzati
Allego il risultato con la modifica, ma non va bene , ho bisogno che sia come l'esempio postato .
Considerando che le grafiche sono 2 ed una delle dimensioni ( la larghezza) è sempre costante , potrei creare le due grafiche, passarne una alla funzione che crea il primo rettangolo, fare la seconda chiamata e poi salvare nel case e non nella funzione .
Così facendo dovrei risolvere il problema . Corretto?
Abbiamo scritto insieme, il tuo codice come ti ho detto, senza modifiche ti mostrerà sempre e solo l'ultimo rettangolo disegnato.
Ti ho postato le correzioni guarda due post più su.
Ultima modifica effettuata da Carlo il 10/08/2021 alle 18:58
Ho provato il tuo esempio e si ferma al case 0 e non è una L rovesciata.
Ho provato anche il case 4 rinominandolo in 0 , ma stessa cosa , non è una L rovesciata.
L'altro problema è che le grafiche non sono tutte uguali in dimensioni , solo la larghezza è sempre uguale , l'altezza ha due valori, nei case 0 e 2 l'altezza sarà il valore di altezzamm , nei case 1 e 3 l'altezza sarà il valore larghezzamm. Questo si risolve facilmente , creando due immagini immagineH ed immagineW e nei case usare quella specifica.
Non capisco perchè non cicla i case.
Ci studio un po sopra.
Grazie
Ho provato il tuo esempio e si ferma al case 0 e non è una L rovesciata.
Ho provato anche il case 4 rinominandolo in 0 , ma stessa cosa , non è una L rovesciata.
L'altro problema è che le grafiche non sono tutte uguali in dimensioni , solo la larghezza è sempre uguale , l'altezza ha due valori, nei case 0 e 2 l'altezza sarà il valore di altezzamm , nei case 1 e 3 l'altezza sarà il valore larghezzamm. Questo si risolve facilmente , creando due immagini immagineH ed immagineW e nei case usare quella specifica.
Non capisco perchè non cicla i case.
Ci studio un po sopra.
Grazie
Ti allego il progetto, le immagini vengono salvate nel percorso dell'eseguibile: ...\BMP_4_Bpp_2\BMP_4_Bpp_2\bin\Debug\
Le grafiche devono cambiare in altezza?
allora deve essere ridichiarata anche la bitmap, oppure come dici tu ne dichiari 2.
Lavoraci un po' le info ce le hai tutte fai sapere.