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: 152
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: 6318
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: 152
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: 152
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: 6318
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: 152
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: 152
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: 6318
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: 152
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