06/06/21 17:13
Carlo
Ci sono più strade, la prima convertire le bmp a 1bpp, in un formato minimo senza pixel indicizzati, come il 16bpp
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 06/06/21 20:00
in programmazione tutto è permesso