DKS_GESTION_IMAGE ???

Résolu
SkyRocKo Messages postés 174 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 18 février 2006 - 9 janv. 2005 à 15:34
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 - 28 mai 2005 à 20:31
Salut à tous



J'ai les octets d'une image au format gif stockés dans une variable
et j'aimerais me servir de la classe de DARKSIDIOUS pour afficher
l'image (celle-ci proviendrait d'internet et ça m'éviterait de
devoir la stocker sur le disque-dur pour l'afficher d'où un gain de
temps)



J'ai déjà regardé un peu et je me suis dit que pour cela il faudrait
éliminer le header et convertir les octets de l'image en infos sur les
couleurs.



Est-ce que je me trompe



A préciser que je suis un newbie en la matière



Merci d'avance

3 réponses

SkyRocKo Messages postés 174 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 18 février 2006
10 janv. 2005 à 21:04
Salut !



Merci pour ton aide DARKSIDIOUS, j'ai finalement opté pour un code tiré d'une source de EBArtSoft : "LoadPicture http:", question de simplicité



Cependant, je trouve ta source superbe, chapeau le gain en rapidité !!!



Pour les intéréssés, j'ai simplement regroupé le tout, à placer dans un module :

'Utilisation : Picture1 = Charge_img("http://www.mvps.org/emorcillo/vbwdcool.gif")





Option Explicit

'

' O O O

' \__/ \__/

' /=||=||=\ oouuuunnnnnnnnmmmmmmmmmmmmmm\

' //
||_||
OleHat32 Demo \

' \\ /\ #\ oouuuunnnnnnnnmmmmmmmmmmmmmmmm\

' /=( \ )==> Coded by EBArtSoft@ \

'//
\O_\/
Copyright © 2004 \

'\\ || || email ebartsoft@hotmail.com \

' \==||=||==/ oouuuunnnnnnnnmmmmmmmmmmmmmmmmmmmm\

' ===========

'E.B

'

' ALL RIGHTS RESERVED ::..

' Permission to use, copy, modify, and distribute this software for

' any purpose and without fee is hereby granted, provided that the

' above copyright notice appear in all copies and that both the copyright

' notice and this permission notice appear in supporting documentation.

'

' THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"

' AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,

' INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR

' FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL WE BE LIABLE

' TO YOU OR ANYONE ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT

' OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,

' INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE, SAVINGS

' OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR NOT WE HAS BEEN

' ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON

' ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE

' POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.

'

Public Const INTERNET_OPEN_TYPE_PRECONFIG As Long = 0

Public Const INTERNET_OPEN_TYPE_DIRECT As Long = 1

Public Const INTERNET_OPEN_TYPE_PROXY As Long = 3

Public Const HTTP_QUERY_CONTENT_LENGTH As Long = 5

Public Const INTERNET_FLAG_RELOAD As Long = &H80000000



Public Declare Sub RtlMoveMemory Lib "kernel32" (pDest As Any, pSource As Any, ByVal dwLength As Long)

Public Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long

Public Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long

Public Declare Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As Long) As Long

Public Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long

Public Declare Function VirtualProtect Lib "kernel32" (lpAddress As
Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect
As Long) As Long

Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long



Public Declare Function OleLoadPicture Lib "olepro32" (pStream As Any,
ByVal lSize As Long, ByVal fRunmode As Long, riid As Any, ppvObj As
Any) As Long

Public Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, pclsid As Any) As Long

Public Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal
hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long



Public Declare Function InternetOpen Lib "wininet.dll" Alias
"InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long,
ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags
As Long) As Long

Public Declare Function HttpQueryInfo Lib "wininet.dll" Alias
"HttpQueryInfoA" (ByVal hHttpRequest As Long, ByVal lInfoLevel As Long,
ByRef sBuffer As Any, ByRef lBufferLength As Long, ByRef lIndex As
Long) As Integer

Public Declare Function InternetOpenUrl Lib "wininet.dll" Alias
"InternetOpenUrlA" (ByVal hOpen As Long, ByVal sUrl As String, ByVal
sHeaders As String, ByVal lLength As Long, ByVal lFlags As Long, ByVal
lContext As Long) As Long

Public Declare Function HttpOpenRequest Lib "wininet.dll" Alias
"HttpOpenRequestA" (ByVal hHttpSession As Long, ByVal sVerb As String,
ByVal sObjectName As String, ByVal sVersion As String, ByVal sReferer
As String, ByVal something As Long, ByVal lFlags As Long, ByVal
lContext As Long) As Long

Public Declare Function HttpSendRequest Lib "wininet.dll" Alias
"HttpSendRequestA" (ByVal hHttpRequest As Long, ByVal sHeaders As
String, ByVal lHeadersLength As Long, sOptional As Any, ByVal
lOptionalLength As Long) As Integer

Public Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile
As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long,
lNumberOfBytesRead As Long) As Integer

Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer

Public Declare Function InternetQueryDataAvailable Lib "wininet.dll"
(ByVal hFile As Long, lpdwNumberOfBytesAvailable As Long, ByVal dwFlags
As Long, ByVal dwContext As Long) As Long





Function PictureFromStr(ByRef Data As String) As IPicture

Dim vStream As IUnknown

Dim vIID(15) As Byte

Dim vSize As Long

Dim vMem As Long

Dim vPtr As Long

vSize = Len(Data)

vMem = GlobalAlloc(2, vSize)

If (vMem = 0) Then Exit Function

vPtr = GlobalLock(vMem)

If vPtr Then

RtlMoveMemory ByVal vPtr, ByVal Data, vSize

GlobalUnlock vMem

If (CreateStreamOnHGlobal(vMem, 1, vStream) = 0) Then

If
(CLSIDFromString(StrPtr("{7BF80980-BF32-101A-8BBB-00AA00300CAB}"),
vIID(0)) = 0) Then


OleLoadPicture ByVal ObjPtr(vStream), vSize, 0, vIID(0), PictureFromStr

End If

End If

End If

GlobalFree vMem

End Function



Function HttpReadPage(ByVal Url As String) As String

Dim vBuff As String

Dim vhOpen As Long

Dim vhUrl As Long

Dim vSize As Long

Dim vRet As Long

vhOpen = InternetOpen("Mozilla/4.0", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)

If vhOpen Then

vhUrl = InternetOpenUrl(vhOpen, Url, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)

If vhUrl Then

If InternetQueryDataAvailable(vhUrl, vSize, 0, 0) Then

If (vSize 0) Then vSize 4096

vBuff = String(vSize, 0)

Do


InternetReadFile vhUrl, vBuff, vSize, vRet


If (vRet = 0) Then Exit Do


HttpReadPage = HttpReadPage & Left$(vBuff, vRet)

Loop

End If

InternetCloseHandle vhUrl

End If

InternetCloseHandle vhOpen

End If

End Function





Function Charge_img(Source As String) As Object



Dim Octets_img As String

Dim IntFileNumber As String



If Trim(LCase(Left$(Source, 7))) <> "http://" Then

IntFileNumber = FreeFile

Octets_img = Space$(FileLen(Source))

Open Source For Binary As IntFileNumber

Get IntFileNumber, , Octets_img

Close IntFileNumber

Else

Octets_img = HttpReadPage(Source)

End If



Set Charge_img = PictureFromStr(Octets_img)



End Function
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 janv. 2005 à 15:57
Salut,



Je suis content de voir que ma classe t'interesse ;)



Ma classe n'est pas destinée à ce genre de manipulation à la base, mais
en rajouttant une fonction, cela reste tout à fait possible.



Il faut juste connaitre comment sont organisées les données dans la
variable et surtout, à partir de quel offset commence le stockage des
données. Il te faut également connaitre comment sont codées les pixels,
car il me semble que le format GIF est compréssé, donc il te faut un
algorithme permettant de lire les données brute, et les convertir en
composantes RGB. Cependant, je doûte fort que tu y gagne en rapidité :
que tu récupère l'image sous forme de variable, ou que tu enregistre le
fichier sur disque, tu devras tout de même télécharger toutes les
données, et télécharger l'image directement sera sûrement plus simple à
faire que la méthode que je te donne !

DarK Sidious

[Administrateur et responsable VB/API du site ProgOtoP]
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
28 mai 2005 à 20:31
té... on parle de moi ? non plutot de mes codes :p
Sympa au moins ça prouve que je fait pas ça pour rien ;)

@+


E.B.
0
Rejoignez-nous