bernie (Normal User)
Pro
Messaggi: 164
Iscritto: 23/10/2019
|
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
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Ciao.
Cosa intendi per " incollare " i file bmp ?
Devi sovrapporre i pixel, affiancare le figure o altro ?
|
|
Carlo (Member)
Guru
Messaggi: 1316
Iscritto: 29/01/2018
|
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 |
Dim bmp1 As New Bitmap("miabmp1.bmp") ' bmp1 prende le dimensioni del file caricato Dim bmp2 As New Bitmap("miabmp2.bmp") ' bmp2 prende le dimensioni del file caricato Dim g As Graphics = Graphics.FromImage(bmp1) ' la bmp1 come layer grafico 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) 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 |
|
bernie (Normal User)
Pro
Messaggi: 164
Iscritto: 23/10/2019
|
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.
|
|
bernie (Normal User)
Pro
Messaggi: 164
Iscritto: 23/10/2019
|
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
|
|
Carlo (Member)
Guru
Messaggi: 1316
Iscritto: 29/01/2018
|
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 |
|
bernie (Normal User)
Pro
Messaggi: 164
Iscritto: 23/10/2019
|
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
|
|
Carlo (Member)
Guru
Messaggi: 1316
Iscritto: 29/01/2018
|
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 |
Dim bmp1_1 As New Bitmap("bianco1.bmp") ' bmp1_1 prende il formato del file caricato Dim bmp2_1 As New Bitmap("testclone.bmp") ' bmp2_1 prende il formato del file caricato Dim area = New Rectangle(0, 0, bmp1_1.Width, bmp1_1.Height) ' converto a 16bpp Dim bmp1_16 As Bitmap = bmp1_1.Clone(area, Drawing.Imaging.PixelFormat.Format16bppRgb555) area = New Rectangle(0, 0, bmp2_1.Width, bmp2_1.Height) ' converto a 16bpp Dim bmp2_16 As Bitmap = bmp2_1.Clone(area, Drawing.Imaging.PixelFormat.Format16bppRgb555) ' ora posso eseguire la fusione Dim g As Graphics = Graphics.FromImage(bmp1_16) ' la bmp1_16 come layer grafico 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) bmp1_16.Save("miabmp3.bmp", Drawing.Imaging.ImageFormat.Bmp) ' salvo il risultato a 16bpp ' per salvare a 1bpp prima l'immagine va riconvertita area = New Rectangle(0, 0, bmp1_16.Width, bmp1_16.Height) Dim bmpout_1 As Bitmap = bmp1_16.Clone(area, Drawing.Imaging.PixelFormat.Format1bppIndexed) 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 |
|
bernie (Normal User)
Pro
Messaggi: 164
Iscritto: 23/10/2019
|
Carlo , esattamente quello che mi serviva .
Grazie
|
|