Chargement d'image depuis un tableau de byte [Résolu]

Signaler
Messages postés
45
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
20 mai 2012
-
Messages postés
45
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
20 mai 2012
-
Salut,
  Actuellement je charge mes images avec la librairie de PaintX.dll de sorte à faire ceci :
Public Function LoadPNG(filename As String) As StdPicture
    Dim PictureDecoder As New PAINTXLib.PictureDecoder
    Set LoadPNG = PictureDecoder.LoadPicture(filename)
End Function

Il me suffit juste ensuite de faire appel à cet fonction de sorte à ce que je puisse ensuite "exploiter" mes images :
Dim Img As StdPicture
Set Img = LoadPNG(filename)

Jusqu'ici pas de problème, cependant maintenant j'ai crypté mes images de façon à ce qu'ils soient illisibles et la seul manière pour que cette fonction fonctionne toujours c'est que mes fichiers soient décryptés sur le DD, ce que je ne veux vraiment pas faire car une fois que les fichiers décryptés sont écrites sur le DD, il y a forcément une solution pour les récupérer.

Actuellement j'arrive à décrypter mes images dans un tableau de byte et ensuite à convertir ces données en image de type StdPicture mais voila,étant donné que je suis obligé de passer par cette fonction (LoadPNG) je suis bloqué.

Dans ma situation, exisiterait-il une manière à ce que je puisse "décoder" mes images de la même manière que la librairie paintx ?

----
Pour infos, voila comment je transforme mon tableau de byte en type image :

Private Declare Function CreateStreamOnHGlobal Lib "ole32.dll" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, lpIStream As IUnknown) As Long
Private Declare Function OleLoadPicture Lib "oleaut32.dll" (ByVal lpStream As IUnknown, ByVal lSize As Long, ByVal fRunmode As Long, riid As Any, lpIPicture As IPicture) As Long

Public Function BytesToPicture(PictureData() As Byte) As StdPicture
     Dim IID_IPicture(3) As Long
     Dim oPicture As IPicture
     Dim nResult As Long
     Dim oStream As IUnknown
     Dim hGlobal As Long

     IID_IPicture(0) = &H7BF80980
     IID_IPicture(1) = &H101ABF32
     IID_IPicture(2) = &HAA00BB8B
     IID_IPicture(3) = &HAB0C3000

     Call CreateStreamOnHGlobal(VarPtr(PictureData(LBound(PictureData))), 0, oStream)
     nResult = OleLoadPicture(oStream, 0, 0, IID_IPicture(0), oPicture)
     If nResult = 0 Then
         Set BytesToPicture = oPicture
     End If
End Function

4 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
peut-être ta fonction....
et bien mettre NEW

http://www.codyx.org/snippet_transformer-donnees-image_48.aspx

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
salut,

euh... et quel est le problème?

avant tu faisais :
Dim Img As StdPicture
Set Img = LoadPNG(filename)

ce qui ne te convient plus car tu passes maintenant par un tableau de bytes au lieu directement du fichier
et tu as une fonction qui fait bytes vers std

donc quel est le problème?
Dim Img As New StdPicture
Set Img = BytesToPicture(TonTableauDeByte())

où est-ce que çà coince?
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
45
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
20 mai 2012

Salut, merci de ta réponse.
Bah le problème c'est que je ne peux rien faire avec, tous semble fonctionner très bien mais impossible de faire Img.Height, Img.Handle [...] sans que l'erreur 91 (Variable objet ou variable bloc With non définie) apparaisse. En gros sa marche mais après pour exploiter l'image sa plante toujours.

Avant l'image était chargé de cette manière :
Public Function LoadPNG(filename As String) As StdPicture
    Dim PictureDecoder As New PAINTXLib.PictureDecoder
    Set LoadPNG = PictureDecoder.LoadPicture(filename)
End Function

Et je me demande si ce n'est pas parce que je ne "décode" pas l'image de cette manière que sa plante. Car moi je passe juste de bytes vers std et il semble manquer quelque chose pour faire ce que je veux faire (Img.Height, Img.Handle etc...).
Messages postés
45
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
20 mai 2012

Ah oui effectivement, j'ai oublié de mettre un New... Et voila d'où venait le problème ^^' J'aurais jamais pensé à ça sur le coup..
Merci ! J'aurais certainement passé encore passé des heures, voir des jours à chercher alors que le problème était sous mes yeux.
Bon maintenant il me reste juste à voir comment faire pareille mais pour les fichiers PNG. Encore merci =)