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 - Paste file bmp
Forum - C# / VB.NET - Paste file bmp

Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 12:39
Martedì, 25/05/2021
Buon Giorno
Ho due file bmp che dovrei "incollare " uno dentro l'altro . Non devo visualizzarlo a video , solo creare il file risultante dai due .
Supponiamo che ho un file bmp di dimensione 1000X1000 pixel . All'interno di questo file , dovrei incollare il contenuto di  un secondo file bmp di dimensione 500X500Pixel .
Qualche suggerimento ?
Grazie  

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 20:58
Martedì, 25/05/2021
Ciao.

Cosa intendi per " incollare " i file bmp ?

Devi sovrapporre i pixel, affiancare le figure o altro ?

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:18
Mercoledì, 26/05/2021
hai scritto nulla?
devi caricare i due file bmp in due bitmap temporanee, trasformare la bmp più grande in layer grafico, in modo che ci puoi disegnare o scrivere sopra, tu hai bisogno di disegnarci un'immagine allora userai drawimage:

Codice sorgente - presumibilmente VB.NET

  1. Dim bmp1 As New Bitmap("miabmp1.bmp") ' bmp1 prende le dimensioni del file caricato
  2. Dim bmp2 As New Bitmap("miabmp2.bmp") ' bmp2 prende le dimensioni del file caricato
  3. Dim g As Graphics = Graphics.FromImage(bmp1) ' la bmp1 come layer grafico
  4. g.DrawImage(bmp2, 0, 0, bmp2.Width, bmp2.Height) ' in bmp1 disegno la bmp2 alle coordinate 0,0 (in alto a sinistra) con le sue dimensioni (bmp2.Width, bmp2.Height)
  5. bmp1.Save("miabmp3.bmp") ' salvo il risultato



nei nomi dei files, non ho messo nessun percorso, significa che le bitmap devono risiedere nella cartella dell'eseguibile...
Aggiungi il tuo percorso e i nomi giusti dei files

Ultima modifica effettuata da Carlo il 26/05/2021 alle 20:15


in programmazione tutto è permesso
PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 17:17
Mercoledì, 26/05/2021
Ciao Carlo
Grazie per il suggerimento , questa sera provo .
Ciao Marco
Praticamente ho un file bmp  sul quale devo "incollare" i pixel di un secondo file e salvare il file risultante.


PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 10:37
Giovedì, 27/05/2021
Ciao Carlo
Purtroppo il tuo consiglio con i file che uso non funziona
"System.Exception: 'Impossibile creare un oggetto Graphics da un'immagine con formato a pixel indicizzati.'"

Io devo usare dei file 1bpp.

Grazie



PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 20:33
Domenica, 30/05/2021
Mi zippi due dei file che devi usare e me li alleghi?
Il risultato deve essere salvato nello stesso formato dei files in ingresso?
Che linguaggio usi?

Ultima modifica effettuata da Carlo il 30/05/2021 alle 20:36


in programmazione tutto è permesso
PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 19:30
Sabato, 05/06/2021
Ciao Carlo
ti allego uno dei file che uso , il secondo file in pratica è un file di dimensioni maggiori di questo , ma con le stesse caratteristiche,però è completamente bianco.
Uso VB.NET  visual studio 2019
Grazie


bernie ha allegato un file: testclone.zip (448 bytes)
Clicca qui per scaricare il file
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:13
Domenica, 06/06/2021
Ci sono più strade, la prima convertire le bmp a 1bpp, in un formato minimo senza pixel indicizzati, come il 16bpp
Codice sorgente - presumibilmente VB.NET

  1. Dim bmp1_1 As New Bitmap("bianco1.bmp") ' bmp1_1 prende il formato del file caricato
  2. Dim bmp2_1 As New Bitmap("testclone.bmp") ' bmp2_1 prende il formato del file caricato
  3.  
  4. Dim area = New Rectangle(0, 0, bmp1_1.Width, bmp1_1.Height) ' converto a 16bpp
  5. Dim bmp1_16 As Bitmap = bmp1_1.Clone(area, Drawing.Imaging.PixelFormat.Format16bppRgb555)
  6.  
  7. area = New Rectangle(0, 0, bmp2_1.Width, bmp2_1.Height) ' converto a 16bpp
  8. Dim bmp2_16 As Bitmap = bmp2_1.Clone(area, Drawing.Imaging.PixelFormat.Format16bppRgb555)
  9.  
  10. ' ora posso eseguire la fusione
  11. Dim g As Graphics = Graphics.FromImage(bmp1_16) ' la bmp1_16 come layer grafico
  12. g.DrawImage(bmp2_16, 0, 0, bmp2_16.Width, bmp2_16.Height) ' in bmp1_16 disegno la bmp2_16 alle coordinate 0,0 (in alto a sinistra) con le sue dimensioni (bmp2_16.Width, bmp2_16.Height)
  13. bmp1_16.Save("miabmp3.bmp", Drawing.Imaging.ImageFormat.Bmp) ' salvo il risultato a 16bpp
  14.  
  15. ' per salvare a 1bpp prima l'immagine va riconvertita
  16. area = New Rectangle(0, 0, bmp1_16.Width, bmp1_16.Height)
  17. Dim bmpout_1 As Bitmap = bmp1_16.Clone(area, Drawing.Imaging.PixelFormat.Format1bppIndexed)
  18. bmpout_1.Save("miabmp4.bmp", Drawing.Imaging.ImageFormat.Bmp) ' salvo il risultato a 1bpp



la seconda strada è invece trattare l'immagine come un array:
1) caricare l'immagine 1
2) con due cicli for copiare tutti i pixel, composti da soli 1 e 0 l'mmagine 1 (più grande) in un array
3) caricare l'immagine 2
4) con due cicli for copiare tutti i pixel, composti da soli 1 e 0 dell'mmagine 2 nelle posizioni desiderate nell'array
5) salvare l'array risultante come bmp 1bpp

E altre strade, vedi LockBits....


Ultima modifica effettuata da Carlo il 06/06/2021 alle 22:00


in programmazione tutto è permesso
PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 11:16
Mercoledì, 09/06/2021
Carlo , esattamente quello che mi serviva .
Grazie

PM Quote