Autore Topic: estrapolare dati da file Bitmap.. (10 piccoli endian)  (Letto 1907 volte)

Offline biggsman

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
estrapolare dati da file Bitmap.. (10 piccoli endian)
« il: 05 Giugno 2015, 11:46:25 »
Salve amici!
Avrei bisogno di riuscire ad estrapolare dei dati da un file bitmap /(24 bit) 10 per 10 pixels (per ora) e cioè:
     Aprire
     Scartare Header
     Tenere il descrittore dei colori
Per ogni pixel scrivere una stringa che descriva posizione x e y e "on" se il colore di questo è diverso da 0 (nero)
In poche parole fare un semplice Per chi lo sa fare..) parsing e dalla tripletta rgb
tipo:
Codice: [Seleziona]
...
Pixel 12 x2 y1 on
Pixel 13 x3 y1 on
Pixel 14 x4 y1 off
...
Pixel 46 x6 y4 on
...


il problema è la codifica che non è ascii
leggendo un po' su google ho letto di questo littel.endian che incasinano su tutto
Se solo riscissi a modificare il contenuto binario in una stringa dopo saprei cosa fare..

pensate sia possibile?  ???
Masiddai!

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: estrapolare dati da file Bitmap.. (10 piccoli endian)
« Risposta #1 il: 05 Giugno 2015, 12:03:39 »
Per ottenere i soli dati grezzi di un'immagine, hai a disposizione almeno due risorse offerte dalla Classe Image:

1) la proprietà .Pixels;

2) la proprietà .Data .

Ti segnalo questa pagina che ho scritto nella WIKI:
http://www.gambas-it.org/wiki/index.php?title=Individuare_i_colori_dei_pixel_di_una_immagine
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline biggsman

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: estrapolare dati da file Bitmap.. (10 piccoli endian)
« Risposta #2 il: 05 Giugno 2015, 12:42:38 »
W ott!
Grazie amico!
gia in passato ho ricevuto un valido aiuto da te: "Gambas3 + Arduino e plot dei dati.." ricordi?
questo è gia un grande passo avanti!
adesso studio un po'..  :)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: estrapolare dati da file Bitmap.. (10 piccoli endian)
« Risposta #3 il: 05 Giugno 2015, 12:45:36 »
Per i file .bmp ti suggerisco anche questa pagina:
http://www.gambas-it.org/wiki/index.php?title=Struttura_del_formato_BMP
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline biggsman

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: estrapolare dati da file Bitmap.. (10 piccoli endian)
« Risposta #4 il: 05 Giugno 2015, 13:04:23 »
si infatti a me serve il terzo blocco..

Offline biggsman

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: estrapolare dati da file Bitmap.. (10 piccoli endian)
« Risposta #5 il: 05 Giugno 2015, 16:36:24 »
Ecco la routine

Codice: [Seleziona]
 Dim Testo As String 
   Dim Risultato As String
   Dim Flg As String
   Dim x, y As Integer
   Dim xx, yy, somma As Integer
   Dim im As Image
   Dim xs, ys As String
   
 
  im = Image.Load("/home/io/Scrivania/slice.bmp")
  somma = 0
  For x = 0 To im.W - 1
   
    For y = 0 To im.h - 1
     
      For yy = y To y + 10
          somma = somma + im[x, yy]
          If im[x, yy] = 0 Then
            Flg = Flg & 0
          Else
            Flg = Flg & 1
          Endif
      Next
      If somma > 0 Then
       ' Print "ci sono pixel colorati"
        If Len(Str$(x)) = 1 Then xs = "00" & Str$(x)
        If Len(Str$(x)) = 2 Then xs = "0" & Str$(x)
        If Len(Str$(x)) = 3 Then xs = Str$(x)
       
        If Len(Str$(y)) = 1 Then ys = "00" & Str$(y)
        If Len(Str$(y)) = 2 Then ys = "0" & Str$(y)
        If Len(Str$(y)) = 3 Then ys = Str$(y)
       
        Risultato = Risultato & xs & "    " & ys & "    " & Flg & gb.NewLine
      Else
       ' Print "non ci sono pixel colorati"
      Endif
      y = y + 9
      somma = 0
      Flg = ""
    Next
  Next

File.Save("/home/io/Scrivania/slice_mediaa.txt", Risultato)
TextArea1.text = Risultato

e questo è il risultato già filtrato dai dati inutili

Codice: [Seleziona]
000    260    00000011111
000    270    11111111111
000    280    11111111111
000    290    11111111111
000    300    11111111111
000    310    11111111111
001    000    11111111111
001    010    11111111111
001    020    11111111111
001    030    11110000000
001    260    00000011111
001    270    11111111111
001    280    11111111111
001    290    11111111111
001    300    11111111111
001    310    11111111111

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: estrapolare dati da file Bitmap.. (10 piccoli endian)
« Risposta #6 il: 05 Giugno 2015, 19:03:55 »
Ecco la routine

e questo è il risultato già filtrato dai dati inutili


...e dunque ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline biggsman

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: estrapolare dati da file Bitmap.. (10 piccoli endian)
« Risposta #7 il: 05 Giugno 2015, 19:20:30 »
si procede!
Nella prima colonna le coordinate dei pixel x, nella seconda di y, nella terza una stringa per accendere un array di led Uv...
sto tentando di costruire una stampante 3d cartesiana ed economica...

Offline biggsman

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: estrapolare dati da file Bitmap.. (10 piccoli endian)
« Risposta #8 il: 05 Giugno 2015, 20:28:22 »
Si lo so che sembra una follia ma sono italiano e di conseguenza naturalmente portato a sbroccare..
Le stampanti sla/dlp vanno molto bene e sono facili da costruire mentre quelle che abbinano un laser ad un sistema X|Y
sono economiche, più difficili da realizzare ma lente..
Se riesco a proiettare tipo in rastrello di punti contemporaneamente...
beh potrebbe migliorare parecchio ma soprattutto, variando la distanza fovale potrei fare pezzi piccoli ad alta precisione o pezzi grandi
a bassa risoluzione più rapidamente..
Forse sono un po' OTma penso che a qualcuno potrebbe interessare.
Cmq son contento pechè oggi credo di avere fatto qualche passetto avanti..

Offline biggsman

  • Gamberetto
  • *
  • Post: 43
    • Mostra profilo
Re: estrapolare dati da file Bitmap.. (10 piccoli endian)
« Risposta #9 il: 06 Giugno 2015, 10:04:42 »
Le stampanti sla/dlp vanno molto bene e sono facili da costruire ma il proiettore costa un botto!