Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - gestione pixel in file bitmap
Forum - C# / VB.NET - gestione pixel in file bitmap

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 16:28
Giovedì, 24/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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:40
Giovedì, 24/10/2019
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à.
PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 8:39
Venerdì, 25/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

  1. Dim test As Bitmap = New Bitmap(50,50)
  2. test.SetPixel(25, 25, Color.Black)
  3. test.Save("C:\pippo.bmp")



mi restituisce questo errore

System.Runtime.InteropServices.ExternalException: 'Errore generico in GDI+.'




PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 9:10
Venerdì, 25/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

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:04
Venerdì, 25/10/2019
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à.
PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 12:15
Venerdì, 25/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

  1. Public Class Form1
  2.     Private Sub Stampa_Click(sender As Object, e As EventArgs) Handles stampa.Click
  3.         Dim test As Bitmap = New Bitmap(1000, 1)
  4.         'Dim test As Bitmap = New Bitmap("c:\pippo.bmp", True)
  5.         test.SetPixel(25, 0, Color.Black)
  6.         test.Save("C:\Digital1\pippo1.bpm")
  7.         test.Dispose()
  8.  
  9.     End Sub
  10. End Class



il Form è vuoto ad eccezione di un button chiamato stampa .
Grazie .

PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 18:42
Domenica, 27/10/2019
purtroppo non sono ancora guarito....
questo è il mio listato
Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.  
  3.     Private Sub Stampa_Click(sender As Object, e As EventArgs) Handles stampa.Click
  4.         Dim hexstring(1) As String
  5.         Dim diviso1 As Int32
  6.         Dim seconda As Int32
  7.         Dim test As Bitmap = New Bitmap(20000, 70)
  8.         Dim b As String
  9.         Dim colore As String
  10.         hexstring(0) = "0x1"
  11.         hexstring(1) = "0x2"
  12.         seconda = 0
  13.         For ripetizione = 0 To 1
  14.             diviso1 = Convert.ToString(Convert.ToInt32(hexstring(ripetizione), 16), 2)       'converto in binario il valore hexstring
  15.             For letture = 0 To 7
  16.                 b = Mid(diviso1, letture + 1, 1)
  17.                 If b = "1" Then
  18.                     colore = "Black"                    'colora il pixel di nero
  19.                 Else colore = "White"                'colora il pixel di bianco
  20.                 End If
  21.                 Dim y As Int32
  22.                 For z = 0 To 139 Step 1
  23.                     For x = 0 To 69 Step 1                         'altezza files (senso di marcia tappeto)
  24.                         y = (letture * 140) + z + seconda
  25.                         test.SetPixel(y, x, Color.FromName(colore))
  26.                     Next x
  27.                 Next z
  28.             Next letture
  29.             seconda = 1121
  30.         Next ripetizione
  31.         test.Save("C:\Digital1\pippo4.bpm")
  32.         test.Dispose()
  33.     End Sub
  34. 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 ?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:08
Domenica, 27/10/2019
Prova a salvare un JPG (e non un PNG)

Codice sorgente - presumibilmente Plain Text

  1. 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à.
PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 9:27
Lunedì, 28/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 .

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo