Ouvrir une image bmp sans api ni fonction intégrée

3/5 (9 avis)

Snippet vu 12 777 fois - Téléchargée 39 fois

Contenu du snippet

C'est une alternative à la fonction LoadPicture() . Son but est uniquement de montrer comment fonctionne un fichier BITMAP 24 bits.

Source / Exemple :


Public Function OuvrirBMP(Fichier As String, pBox As PictureBox, Optional ErrAvertir As Boolean = False) As Boolean
Dim Contenu() As Byte, Longueur As Long
Dim a As Long
Dim fFile As Long
Dim X As Long, Y As Long
Dim iWidth As Long, iHeight As Long
Dim pHDC As Long

    fFile = FreeFile
    pBox.Cls
    
    Longueur = FileLen(Fichier)
    
    ReDim Contenu(1 To Longueur)
    
    'On ouvre le fichier pour le mettre dans un tableau
    Open Fichier For Binary Access Read As #fFile
        Get #fFile, 1, Contenu
    Close #fFile
    
    X = 0: Y = 0
    a = Contenu(11) + 1 'On détermine la longueur de l'entête grâce au fichier
    
    'Déterminer les dimentions de l'image
    iHeight = (Contenu(24) * 256) + Contenu(23)
    iWidth = (Contenu(20) * 256) + Contenu(19)
    
    If Int((Longueur - a + 1) / (iHeight * iWidth)) <> 3 Then
        If ErrAvertir = True Then MsgBox "Seul les images 24 bits sont acceptées", vbCritical
        OuvrirBMP = False
        Exit Function
    End If
    pBox.Width = iWidth 'iWidth
    pBox.Height = iHeight 'iHeight

    'pHDC = GetDC(pBox.hwnd)

    Do While (a <= Longueur)
        pBox.PSet (X, iHeight - Y - 1), RGB(Contenu(a + 2), Contenu(a + 1), Contenu(a))
        
        'SetPixel pHDC, X, iHeight - Y - 1, RGB(Contenu(a + 2), Contenu(a + 1), Contenu(a))
        X = X + 1
        If X = iWidth Then X = 0: Y = Y + 1

        a = a + 3
    Loop

    OuvrirBMP = True
End Function

Conclusion :


Je vous dirais bien joyeux noël, mais il reste encore 2 jours, alors il serait inapproprié de le dire.

A voir également

Ajouter un commentaire Commentaires
cs_Unreal Messages postés 89 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 26 mars 2006
26 oct. 2005 à 22:45
Super source et bravo pour l'etude de fonctionnement du BMP ! Perso, moi, j'ai pas compri grand chose! mdr
bien jouer ;)
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
25 déc. 2004 à 03:31
oui enfin wav et bdd c'est plus compliqué que du bitmap...
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
24 déc. 2004 à 21:43
La source sur le WAV m'interesse, je vais aller voir ça. Pour la base de donnée, je connais des gens qui utilisait des TXT pour la construire (sans tableau ni rien). Ce sont des gens soient très vaillant, soient des génis ;)
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
24 déc. 2004 à 21:40
ennixo> Je sais, mais l'optimisation à toujours une limite, quand elle est atteinte et bien ...

Et pour pset, il y avait la fonction SetPixel que j'utilisait avant qui elle va au moins 3 fois plus vite que PSet, mais je n'arrives plus à m'en servir, je sais pas s'il y a un truc que j'ai oublier ou c'est dû à WinXP ?

@+
cs_legion91 Messages postés 216 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 15 décembre 2010
24 déc. 2004 à 13:55
Je trouve cette source trés interressante, surtout que les tableaux de valeurs servent aussi dans les fichiers Wav,mp3... et j'avais fait une source pour les base de donnée (simpliste mais que j'utilise maintenant tres souvent) utilisant justement les tableaux.

Ma source:
http://www.vbfrance.com/code.aspx?ID=25235

Et celle du format Wav:
http://www.vbfrance.com/code.aspx?ID=24461

J'espere que sa t'interressera.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.