Problema con inkPicture control

Soy nuevo en TodoExpertos,
Hice una pregunta pero creo que no la tiene asignada ningún experto, por eso te la formulo directamente por aquí.
Trabajo con PB 10.5
Estoy intentando cargar una imagen en un inkPicture control desde
una variable blob, para lo cual uso la función LoadPicture(). El asunto
es que no funciona, no se ve la imagen en el control.
He visto la ayuda de PB y he probado llamar al LoadPicture con un
argumento string con el path completo de mi imagen y esta vez si que
funciona, pero no es lo que me interesa, ya que lo que quiero es
mostrar el contenido de mi variable blob sin usar archivos temporales.
El código de prueba es el siguiente:
---------------------------------------------
Esto NO funciona (basado en ejemplo de PB) :
string    ls_inkpath
integer  li_filenum
integer  li_size
blob      lblb_ink
ls_inkpath = "C:\temp\ejemplo.jpg"
li_filenum = FileOpen(ls_inkpath, StreamMode!)
If li_filenum <> -1 Then
   li_size = FileRead(li_filenum, lblb_ink)
   FileClose(li_filenum)
   ip_1.LoadPicture(lblb_ink)
End If
---------------------------------------------
Esto SI funciona:
string ls_inkpath
ls_inkpath = "C:\temp\ejemplo.jpg"
ip_1.LoadPicture(ls_inkpath)
---------------------------------------------
¿Podrías probar esto y ver si a ti te funciona correctamente?
O en todo caso, ¿ves en donde está mi error?
Es que pienso que estoy haciéndolo tal cual el ejemplo de PB, pero no funciona.
El archivo ejemplo.jpg es pequeño y solo ocupa 13kb

1 respuesta

Respuesta
1
Yo lo hago de esta forma
String ls_Path, ls_File, ls_Type, ls_Mask
Integer li_Pos
ls_Type = "*.JPG"
ls_Mask = "Bitmap Files (*.jpg), *.jpg, JPG Files (*.jpg)"
//Obtener el nombre de la imagen.
integer li_Rpt
li_Rpt=GetFileOpenName("Seleccionar Imagen", ls_Path, ls_File,ls_Type, ls_Mask)
string docpath, docname[]
//li_Rpt=GetFileOpenName("Select File", &
//   docpath, docname[], "DOC", &
//   + "Text Files (*.TXT),*.TXT," &
//   + "Doc Files (*.DOC),*.DOC," &
//   + "All Files (*.*), *.*", &
//   "C:\Program Files\Sybase", 18)
If  li_Rpt= 1 Then
    li_Pos = Pos(ls_Path, ls_File)
    p_1.PictureName = ls_Path
    p_1.OriginalSize = False
else   
    return
End If
El ejemplo que puse es solo para darte una idea de lo que quiero hacer.
Mi problema es más complejo que eso.
Tengo la información de la imagen guardada en una variable de tipo blob (la he traído de la bd), como ya la tengo la información de la imagen en memoria, lo que quiero es visualizarla, y para eso intento usar el control inkPicture puesto que vi en la ayuda de PB que es posible usar el LoadPicture para pasar los datos de una variable tipo blob a este tipo de controles... si ves la ayuda de PB verás que el ejemplo es muy parecido a lo que te he puesto, sin embargo aún así no funciona.
La segunda solución que tengo en mente es crear un archivo temporal y luego con eso podría usar el inkPicture o un Control Picture simple para mostrar la imagen, pero la primera opción es más eficiente, ya que no necesito escribir la información en un archivo para luego volver a leerla... y además estoy hablando de cientos de registros, por lo que de optar por la segunda opción disminuiría el rendimiento de mi aplicación y es lo que quiero evitar.
¿Entiendes mi problema?, ¿Podrías ver si a ti te funciona los ejemplos de power builder? (El código que te pasé)
Sea como sea te agradezco la ayuda.
Gracias por intentar ayudarme,
Investigando un poco más encontré la respuesta a lo que buscaba.
La solución es usar el picture control pero cargar el blob de esta manera:
p1.SetPicture(lblb_imagen)
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas