Toon posts:

[VB] Image omzetten naar binair

Pagina: 1
Acties:
  • 142 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Opdracht
Ik ben bezig met een lichtkrant aan het ontwikkelen. De lichtkrant is gebaseerd op de 80C59 µC en stuurt 80 * 16 leds aan. De communicatie met deze µC gebeurt via een FT245BM USB interface chip (USB <-> 8 bit I/O).

Nu is het de bedoeling dat de verzonden informatie naar de µC in een e²prom wordt opgeslagen. Deze e²prom bevat dus de bitmaps die de µC telkens zal uitsturen naar de leds.

Vraag
Ik zal dus een zwart/wit afbeelding (een bitmap) moeten omzetten naar binaire waarden, waarbij die waarden (0 voor wit en 1 voor zwart) opgeslagen worden in een array van 16x80 (80 kolommen, 16 rijen).

Voor de eenvoud zou ik veronderstellen dat de afbeelding al de juiste afmetingen heeft. Ik vermoed dat ik de functie scanline nodig heb? Of bitpixel of dergerlijke? Als ik de binaire waarde van een pixel kan opvragen, kan ik al beginnen. De rest zou dmv een pointer te doen zijn: telkens een pixel opschuiven en het resultaat schrijven in een array.

Hoe kan ik dus de binaire waarden van een pixel opvragen?

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 20:01

Super_ik

haklust!

plaatje is al zwartwit dus?
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Command1_Click()
    Dim plaatje(80, 16) As Boolean
    For x = 1 To 80
        For y = 1 To 15
            If Picture1.Point(x, y) > rgb(127,127,127) Then
                plaatje(x, y) = True
            Else
                plaatje(x, y) = False
            End If
        Next
    Next
End Sub


point retouneerd de rgb waarde(long) van een pixel

[ Voor 98% gewijzigd door Super_ik op 21-04-2004 10:47 ]

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
Momenteel heb ik volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub cmdLoadImage_Click()
Dim plaatje(80, 80) As Boolean
    
Text1.Text = ""

    For x = 1 To 15
        For y = 1 To 80
            If Picture1.Point(x, y) > RGB(127, 127, 127) Then
                plaatje(x, y) = True
                Text1.Text = Text1.Text + "1"
                
            Else
                plaatje(x, y) = False
                Text1.Text = Text1.Text + "0"

            End If
        Next
        
        Text1.Text = Text1.Text + vbCr + vbLf
               
 
    
    Next


Probleem is het resultaat:
Afbeeldingslocatie: http://www.dehoucke.be/tweak/test.jpg
De afbeelding bestaat nochtans uit 2 kleuren: links wit en rechts zwart.
Blijkbaar is picture.point altijd groter dan RGB (127,127,127).

[ Voor 8% gewijzigd door Verwijderd op 21-04-2004 11:31 ]


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 20:01

Super_ik

haklust!

heb je de scalemode van picture1 op pixel gezet?
en voor vbCr + vbLf heb je vbCrLf :)

en door eerst for X en dan for Y te doen draait t plaatje een kwartslag (denk daar maar s over na :P)

je x gaat maar tot 15, ik zie zo dat je alle 15 meest linkse pixels wit zijn :) oftewel, hij komt helemaal niet bij t zwarte deel

[ Voor 59% gewijzigd door Super_ik op 21-04-2004 12:09 ]

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Verwijderd

Topicstarter
@Super_ik: thx a lot ! _/-\o_

Huidige resultaat:
Afbeeldingslocatie: http://www.dehoucke.be/tweak/clip.jpg

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Dim Padnaam As String

With cmDialog
  '  .DialogTitle = "Open afbeelding"
    .CancelError = False
    .Filter = "afbeeldingen (*.*)|*.*"
    .ShowOpen
End With

Picture1.Picture = LoadPicture(cmDialog.FileName)

Picture1.AutoSize = True

Picture1.Refresh    'indien geen refresh, kan het scannen verkeerd gebeuren
                    'MsgBox "test", vbOKOnly


Dim plaatje(80, 80) As Boolean

Text1.Text = ""

    For y = 0 To 15
        For x = 0 To 79
            If Picture1.Point(x, y) > RGB(127, 127, 127) Then
                plaatje(x, y) = True
                Text1.Text = Text1.Text + "0"

            Else
                plaatje(x, y) = False
                Text1.Text = Text1.Text + "1"

            End If
        Next

        Text1.Text = Text1.Text + vbCrLf



    Next

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 20:01

Super_ik

haklust!

:>

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek

Pagina: 1