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 - File bmp
Forum - C# / VB.NET - File bmp - Pagina 3

Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ] Precedente | Prossimo
Avatar
bernie (Normal User)
Pro


Messaggi: 149
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 18:52
Giovedì, 15/07/2021
Codice sorgente - presumibilmente VB.NET

  1. Dim fetta As New Rectangle(numero , 0, 1000, immagine.Height)
  2.         Dim clone4bpp As Bitmap = immagine.Clone(fetta, Imaging.PixelFormat.Format4bppIndexed)
  3.         clone4bpp.SetResolution(360, 360)
  4.         clone4bpp.Save("C:\1provaclone4bpp.bmp", Imaging.ImageFormat.Bmp)
  5.         clone4bpp.Dispose()



immagine viene creato nell'altra parte di programma, non serve neanche salvarlo sul disco , risparmio tempo e spazio.
Numero è dove devo iniziare a clonare , a step di 1000, quindi primo taglio a 999, secondo 1999, terzo 2999 e via di seguito .

Grazie



PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1087
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:31
Giovedì, 15/07/2021
Una guida base ma completa la trovi qui: http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_ ...
i capitoli 96 e 97 parlano della grafica.

Perché ritieni che è più comodo fare un'immagine grande per poi tagliarla?
Perché non costruisci le strisce direttamente?
Se il lavoro è ripetitivo, ti puoi scrivere una routine, passi i parametri dell'immagine completa e la routine produce le striscie in automatico.
Vedo che continui ad inserire .SetResolution, devi stampare l'immagine?
Con i valori di risoluzione a 360 DPI, metti 360pixel in un pollice. Se il sistema grafico che usi ne tiene conto, setterei 50 DPI o meno (vista la tipologia delle BMP) in modo che per occupare la stessa superficie servono meno pixel.

Ultima modifica effettuata da Carlo il 15/07/2021 alle 19:47


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


Messaggi: 149
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 20:02
Giovedì, 15/07/2021
Si, le devo stampare, per quello setto la risoluzione e deve essere 360.

Penso che sia più semplice fare la grafica e poi tagliarla, con rettangoli o quadrati potrei anche fare già le grafiche a misura, con figure irregolari tipo ellisse, si complica un po'.

Adesso ho automatizzato il taglio con un ciclo for da 0 alla larghezza della grafica a step di 1000 pixel. Tanto la grafica totale è un multiplo esatto di 1000.


PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1087
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 20:17
Giovedì, 15/07/2021
OK :k:


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


Messaggi: 149
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 19:11
Venerdì, 16/07/2021
Spero di non infrangere nessun regolamento, continuo a postare qui.
Ho un bmp già creato a cui devo cambiare il colore. Se lo carico in un vettore e vado ad analizzare ogni singolo pixel, se il valore del pixel è =0, non lo tocco se diverso da 0 vado a scrivere il valore che voglio io. Invece di scrivere colorvalue lo leggo e faccio la comparazione, nel caso lo sovrascrivo.
Adesso non ho il PC e quindi non posso provare, è corretto il ragionamento?
Grazie

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1087
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:49
Venerdì, 16/07/2021
Si.
Vettore di Bytes?
Se si, considera che in base al formato dei pixel, il significato del valore del Byte letto cambia.


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


Messaggi: 149
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 20:03
Venerdì, 16/07/2021
Si, pensavo di usare lo stesso sistema che mi hai fatto vedere per scrivere i pixel, usarlo per leggerli e poi eventualmente sovrascriverli

PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 149
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 11:06
Sabato, 17/07/2021
Infatti , mi sono incartato nella lettura dei Byte,credo e spero solo li, anche se non è poco.
Codice sorgente - presumibilmente VB.NET

  1. ' clono un file esistente e lo salvo a 4bpp
  2.         Dim originale As New Bitmap("C:\greca.tiff")
  3.         Dim clonerettangolo As New Rectangle(0, 0, originale.Width, originale.Height)
  4.         Dim clone4bpp As Bitmap = originale.Clone(clonerettangolo, Imaging.PixelFormat.Format4bppIndexed)
  5.  
  6.         clone4bpp.Save("C:\1clonegreca4bpp.bmp", Imaging.ImageFormat.Bmp)
  7.         clone4bpp.Save("C:\1clonegreca4bpp.tiff", Imaging.ImageFormat.Tiff)
  8.  
  9.         ' creo la pallette colori
  10.         Dim palette As Imaging.ColorPalette = clone4bpp.Palette
  11.         For i = 0 To palette.Entries.Length - 1
  12.             palette.Entries(i) = Color.FromArgb(i * 17, i * 17, i * 17)
  13.         Next i
  14.  
  15.         ' associo la palette creata alla bitmap 4bpp,
  16.         ' i valori 0...15 ora corrispondono alla scala dal nero al bianco
  17.         clone4bpp.Palette = palette
  18.  
  19.         ' blocco i bit della bitmap per poter lavorare direttamente su un vettore di bytes
  20.         Dim area As Rectangle = New Rectangle(0, 0, clone4bpp.Width, clone4bpp.Height)
  21.         Dim bmpData As Imaging.BitmapData = clone4bpp.LockBits(area, Imaging.ImageLockMode.ReadWrite, clone4bpp.PixelFormat)
  22.  
  23.         ' puntatore all'indirizzo di memoria del primo byte.
  24.         Dim ptr As IntPtr = bmpData.Scan0
  25.  
  26.         ' un vettore che conterrà tutti i bytes della bitmap.
  27.         Dim bytes As Long = Math.Abs(bmpData.Stride) * clone4bpp.Height ' calcolo dei bytes necessari
  28.         Dim colorValues(bytes - 1) As Byte
  29.  
  30.         ' quello che vorrei fare è andare a leggere il valore del pixel e nel caso che sia diverso dal  bianco  lo coloro come voglio io
  31.         For ind = 0 To Math.Abs(bmpData.Stride) - 1
  32.  
  33.             If colorValues(ind) < 14 Then
  34.                 colorValues(ind) = 7
  35.             End If
  36.         Next
  37.         System.Runtime.InteropServices.Marshal.Copy(colorValues, 0, ptr, bytes)
  38.         clone4bpp.UnlockBits(bmpData) ' sblocco bit
  39.         clone4bpp.SetResolution(360, 360)
  40.         clone4bpp.Save("C:\clonegreca4bpp.bmp", Imaging.ImageFormat.Bmp)
  41.         clone4bpp.Save("C:\clonegreca4bpp.tiff", Imaging.ImageFormat.Tiff)
  42.         clone4bpp.Dispose()
  43.     End Sub



Ho provato anche a 8bpp , modificando la pallette colori ,il risultato è il medesimo , un bmp completamente nero.
Il problema per me è nel ciclo   If colorValues(ind) < 14 , ma non capisco .
Grazie per eventuali suggerimenti .

Allego anche il file che uso per fare le prove.






bernie ha allegato un file: greca.zip (2107 bytes)
Clicca qui per scaricare il file
PM Quote
Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ] Precedente | Prossimo