Oppure

Loading
24/10/19 14:28
bernie
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 24/10/19 14:29
aaa
24/10/19 14:40
nessuno
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à.
25/10/19 6:39
bernie
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

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+.'



aaa
25/10/19 7:10
bernie
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
aaa
25/10/19 10:04
nessuno
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à.
25/10/19 10:15
bernie
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 .....
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 .
aaa
27/10/19 17:42
bernie
purtroppo non sono ancora guarito....
questo è il mio listato
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 ?
aaa
27/10/19 18:08
nessuno
Prova a salvare un JPG (e non un PNG)

        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à.