
bernie (Normal User)
Pro
    
Messaggi: 152
Iscritto: 23/10/2019
|
Salve , ho un file bitmap(creato con photoshop e nominato pippo) di dimensione 1000X70 pixel, 360dpi.
I pixel sono tutti di colore bianco (255,255,255) .
Dovrei:
aprire il file pippo,
cambiare il colore dei pixel ( in base a uno schema ben preciso ) in nero (0,0,0),
salvarlo cambiandogli nome pippo1
riaprire il file pippo
modificarlo e poi salvandolo con nome pippo2
e via così per x volte.
Mi servirebbe qualche suggerimento su che approccio usare per la gestione dei pixel.
Spero di essere stato chiaro
Grazie
Ultima modifica effettuata da bernie il 24/10/2019 alle 16:29 |
|

nessuno (Normal User)
Guru^2
    
Messaggi: 6318
Iscritto: 03/01/2010
|
Ottieni una Bitmap con una Image.FromFile e usa GetPixel e SetPixel. Poi usa il Save della Bitmap
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|

bernie (Normal User)
Pro
    
Messaggi: 152
Iscritto: 23/10/2019
|
Grazie per la risposta, due precisazioni che avevo dimenticato nel post precedente
1) uso VB.NET
2) non ho necessità di editare il file
Ho cercato Image.FromFile , ho anche provato l'esempio ma, forse io non ho capito , ma non è quello che mi serve.
questo
Codice sorgente - presumibilmente C# / VB.NET |
Dim test As Bitmap = New Bitmap(50,50)
test.SetPixel(25, 25, Color.Black)
test.Save("C:\pippo.bmp")
|
mi restituisce questo errore
System.Runtime.InteropServices.ExternalException: 'Errore generico in GDI+.'
|
|

bernie (Normal User)
Pro
    
Messaggi: 152
Iscritto: 23/10/2019
|
scusate , ho dormito io , devo "chiudere", aggiungendo "test.Dispose()" l'errore sparisce, ma ne compare un altro
System.ArgumentException: 'Parametro non valido.'
riferito alla riga in cui dovrei salvare il file
|
|

nessuno (Normal User)
Guru^2
    
Messaggi: 6318
Iscritto: 03/01/2010
|
Scusa ma tu hai scritto
"Dovrei:
aprire il file pippo ..."
Quando lo apri il file in questione?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|

bernie (Normal User)
Pro
    
Messaggi: 152
Iscritto: 23/10/2019
|
Ho risolto la prima parte .
nessuno , giusta considerazione , in effetti ho due possibilità , aprire il file pippo , oppure creare direttamente un file con le dimensioni ( pixel ) che voglio , gestirlo in base alle mie necessità e poi salvarlo col nome .
Allego la soluzione che mi funziona , non è niente di particolare , ma per correttezza nei confronti di chi ha aiutato .
Il secondo errore era generato perchè non avevo i privilegi per scrivere nella posizione specificata .....
Codice sorgente - presumibilmente VB.NET |
Public Class Form1 Private Sub Stampa_Click(sender As Object, e As EventArgs) Handles stampa.Click Dim test As Bitmap = New Bitmap(1000, 1) 'Dim test As Bitmap = New Bitmap("c:\pippo.bmp", True) test.SetPixel(25, 0, Color.Black) test.Save("C:\Digital1\pippo1.bpm") test.Dispose() End Sub End Class
|
il Form è vuoto ad eccezione di un button chiamato stampa .
Grazie .
|
|

bernie (Normal User)
Pro
    
Messaggi: 152
Iscritto: 23/10/2019
|
purtroppo non sono ancora guarito....
questo è il mio listato
Codice sorgente - presumibilmente VB.NET |
Public Class Form1 Private Sub Stampa_Click(sender As Object, e As EventArgs) Handles stampa.Click Dim hexstring(1) As String Dim diviso1 As Int32 Dim seconda As Int32 Dim test As Bitmap = New Bitmap(20000, 70) Dim b As String Dim colore As String hexstring(0) = "0x1" hexstring(1) = "0x2" seconda = 0 For ripetizione = 0 To 1 diviso1 = Convert.ToString(Convert.ToInt32(hexstring(ripetizione), 16), 2) 'converto in binario il valore hexstring For letture = 0 To 7 b = Mid(diviso1, letture + 1, 1) If b = "1" Then colore = "Black" 'colora il pixel di nero Else colore = "White" 'colora il pixel di bianco End If Dim y As Int32 For z = 0 To 139 Step 1 For x = 0 To 69 Step 1 'altezza files (senso di marcia tappeto) y = (letture * 140) + z + seconda test.SetPixel(y, x, Color.FromName(colore)) Next x Next z Next letture seconda = 1121 Next ripetizione test.Save("C:\Digital1\pippo4.bpm") test.Dispose() End Sub End Class
|
nel form c'è solo un buttom .
Il primo problema è che il file bitmap che scrive non è possibile aprirlo con photoshop. Mi servirebbe un file in bianco e nero, 8bit canale .
La seconda cosa che non capisco è perchè scrive nel file solo il valore del primo array e lo ripete due volte . sembra quasi che il ciclo for-next ripetizione non funzioni come vorrei .
qualche suggerimento ?
|
|

nessuno (Normal User)
Guru^2
    
Messaggi: 6318
Iscritto: 03/01/2010
|
Prova a salvare un JPG (e non un PNG)
Codice sorgente - presumibilmente Plain Text |
test.Save("C:\Digital1\pippo4.jpg", Imaging.ImageFormat.Jpeg)
|
Per il problema del disegno, prima devo districarmi in quel codice che hai scritto ... senza offesa, confuso e incomprensibile ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|

bernie (Normal User)
Pro
    
Messaggi: 152
Iscritto: 23/10/2019
|
Grazie nessuno
adesso photoshop me lo apre, devo solo impostare i DPI corretti.
Per quanto riguarda il programma , hai ragione , è un pò incasinato , ma è solo una parte , quindi man mano che aggiungo i pezzi mancanti , si dovrebbe scomplicare,almeno spero .
|
|