SkyRocKo
Messages postés174Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention18 février 2006
-
9 janv. 2005 à 15:34
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 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.
' 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
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 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]