help!!! crear imagen desde la memoria
Publicado por Jorge Carlos (9 intervenciones) el 08/01/2006 17:11:57
Hola haber si alguien me puede ayudar.
Lo que intento hacer es leer un campo de mi base de datos que contiene una imagen para luego pasarlo a un objeto Picture sin tener que crear un archivo en el cpu si no desde un array de binario.
El punto es que la funcion no me devuelve la imagen. Si alguien me puede orientar sobre que estoy haciendo mal.
Con este codigo paso el bloque de bytes de mi campo a un array de bytes
Blocks = Int(rs.Fields(fldContieneImagen).ActualSize / nBUFFER)
LeftOver = rs.Fields(fldContieneImagen).ActualSize Mod nBUFFER
ReDim Data(Blocks * nBUFFER + LeftOver)
CopyMemory Data(1), rs.Fields(fldContieneImagen).Value, LeftOver + Blocks * nBUFFER
Set Pic1.Picture = PictureFromBits(Data)
Public Function PictureFromBits(abPic() As Byte) As IPicture
Dim nLow As Long
Dim cbMem As Long
Dim hMem As Long
Dim lpMem As Long
Dim IID_IPicture As GUID
Dim istm As stdole.IUnknown ' IStream
Dim ipic As IPicture
On Error GoTo Out
nLow = LBound(abPic)
On Error GoTo 0
cbMem = (UBound(abPic) - nLow) + 1
hMem = GlobalAlloc(GMEM_MOVEABLE, cbMem)
If hMem Then
lpMem = GlobalLock(hMem)
If lpMem Then
MoveMemory ByVal lpMem, abPic(nLow), cbMem
Call GlobalUnlock(hMem)
If (CreateStreamOnHGlobal(hMem, CTrue, istm) = S_OK) Then
If (CLSIDFromString(StrPtr(sIID_IPicture), IID_IPicture) = S_OK) Then
Call OleLoadPicture(ByVal ObjPtr(istm), cbMem, CFalse, IID_IPicture, PictureFromBits)
End If ' CLSIDFromString
End If ' CreateStreamOnHGlobal
End If ' lpMem
End If ' hMem
Out:
End Function
Lo que intento hacer es leer un campo de mi base de datos que contiene una imagen para luego pasarlo a un objeto Picture sin tener que crear un archivo en el cpu si no desde un array de binario.
El punto es que la funcion no me devuelve la imagen. Si alguien me puede orientar sobre que estoy haciendo mal.
Con este codigo paso el bloque de bytes de mi campo a un array de bytes
Blocks = Int(rs.Fields(fldContieneImagen).ActualSize / nBUFFER)
LeftOver = rs.Fields(fldContieneImagen).ActualSize Mod nBUFFER
ReDim Data(Blocks * nBUFFER + LeftOver)
CopyMemory Data(1), rs.Fields(fldContieneImagen).Value, LeftOver + Blocks * nBUFFER
Set Pic1.Picture = PictureFromBits(Data)
Public Function PictureFromBits(abPic() As Byte) As IPicture
Dim nLow As Long
Dim cbMem As Long
Dim hMem As Long
Dim lpMem As Long
Dim IID_IPicture As GUID
Dim istm As stdole.IUnknown ' IStream
Dim ipic As IPicture
On Error GoTo Out
nLow = LBound(abPic)
On Error GoTo 0
cbMem = (UBound(abPic) - nLow) + 1
hMem = GlobalAlloc(GMEM_MOVEABLE, cbMem)
If hMem Then
lpMem = GlobalLock(hMem)
If lpMem Then
MoveMemory ByVal lpMem, abPic(nLow), cbMem
Call GlobalUnlock(hMem)
If (CreateStreamOnHGlobal(hMem, CTrue, istm) = S_OK) Then
If (CLSIDFromString(StrPtr(sIID_IPicture), IID_IPicture) = S_OK) Then
Call OleLoadPicture(ByVal ObjPtr(istm), cbMem, CFalse, IID_IPicture, PictureFromBits)
End If ' CLSIDFromString
End If ' CreateStreamOnHGlobal
End If ' lpMem
End If ' hMem
Out:
End Function
Valora esta pregunta
0