Power Builder - problema con carga de imagen

   
Vista:

problema con carga de imagen

Publicado por Martin Rey (2 intervenciones) el 02/07/2010 19:27:59
Holas, cuando quiero visualizar ciertas imagenes me sale el siguiente mensaje :"Image too wide for this implementation", alguien sabe como manejar este error y que no me bote de la aplicación.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Adolfo Chairez

RE:problema con carga de imagen

Publicado por Adolfo Chairez (71 intervenciones) el 03/07/2010 02:31:41
Tal vez esto te ayude, he podio guardar y recuperar imagenes en una tabla sql. Debes tener una tabla con el campo image:

Primero debemos modificar: c:\archivos de programa\sybase\shared\powerbuilder\pbodb105.ini (o en su caso la version que sea. ejm. pb0db12.ini) y localizar lo siguiente
PBMaxBlobSize='32767'
PBMaxTextSize='32767'
y cambiarlo por
PBMaxBlobSize='2147483647'
PBMaxTextSize='32767000'

Para Guardar una imagen:
string ls_pathname, ls_filename, ls_filtro
long ll_i, li_file, ll_usu_num_ctrl
blob lb_usu_foto, lb_temp

ChangeDirectory("C:\Documents and Settings\COR_ACHAIREZ\Mis documentos\Mis imágenes"s)
ll_i = dw_grid.GetSelectedRow(0)

if ll_i > 0 or ll_i <= dw_grid.rowcount() then
ls_filtro = "JPEG Files (*.jpg),*.jpg," + "GIFF Files (*.gif),*.gif, BMP (*.bmp)"
if GetFileOpenName("Archivo de Imagen:", ls_pathname, ls_filename , "jpg", ls_filtro) = 0 then return

li_file = FileOpen(ls_pathname, StreamMode!)
if li_file = -1 then
messagebox('Error','Falló la apertura del archivo imagen',stopsign!)
return
else
ll_usu_num_ctrl = dw_grid.getitemnumber(ll_i,"usu_num_ctrl")
DO WHILE FileRead(li_file,lb_temp) > 0
lb_usu_foto += lb_temp
LOOP
FileClose(li_file)
p_usu_foto.SetPicture(lb_usu_foto)

UPDATEBLOB usuario
SET usu_foto = :lb_usu_foto
WHERE usu_num_ctrl = :ll_usu_num_ctrl;
if sqlca.sqlcode = -1 then
messagebox("Error","No se pudo ejecutar la query actualiza foto~n~r" + sqlca.sqlerrtext, stopsign!)
return
end if
end if
else
messagebox("Error","Seleccione un registro en la datawindow inferior", stopsign!)
return
end if

Para recuperar:
long ll_usu_num_ctrl
Blob lb_usu_foto
long ll_i

ll_i= dw_grid.GetSelectedRow(0)
if ll_i> 0 and ll_i<= dw_grid.rowcount() then
ll_usu_num_ctrl = dw_grid.getitemnumber(ll_i,"usu_num_ctrl")
SELECTBLOB usu_foto INTO :lb_usu_foto
FROM usuario
WHERE usu_num_ctrl = :ll_usu_num_ctrl;
if sqlca.sqlcode = -1 then
messagebox("Error","No se pudo recuperar imagen" + sqlca.sqlerrtext, StopSign!)
return
end if
p_usu_foto.setpicture(lb_usu_foto)
end if
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con carga de imagen

Publicado por Martin Rey (2 intervenciones) el 05/07/2010 18:10:28
Hola Adolfo, si se logra grabar en el SQL la imagen, el problema es cuando quiero ver una imagen de mas de 3500 pixel, me sale el mensaje de error mencionado.
Saludos
Martin
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con carga de imagen

Publicado por JorgeE (9 intervenciones) el 07/07/2010 19:50:50
Probablemente no estes guardando la imagen completa en la BD, generalmente sucede con imagenes que superan los 32 kb, la lectura del archivo deberá ser byte por byte para evitar problemas.

Crea una función y dentro de ella pega el siguiente código.

a esta función deberás pasar como argumento la ruta de la imagen y una variable blob donde se guardará la imagen leida desde disco.

si la función te devuelve 1 entonces todo está ok puedes proceder con el UPDATEBLOB.

Saludos.

////////////////////////////////////////////////////////////////////////////////////////////////
Integer li_Whites, li_Cnt
Blob lblb_image, lblb_BlobTotal
Long ll_BlobLen, ll_ByteRead
Integer li_File
Boolean lb_exists

lb_exists = FileExists(as_PictureName)
IF Not lb_exists THEN
of_setMessage("No es posible leer el archivo debido a que no existe en el directorio especificado.")
RETURN -1
END IF

ll_BlobLen = FileLength(as_PictureName)

IF ll_BlobLen > 32765 THEN
IF Mod(ll_BlobLen, 32765) = 0 THEN
li_Whites = ll_BlobLen/32765
ELSE
li_Whites = (ll_BlobLen/32765) + 1
END IF
ELSE
li_Whites = 1
END IF

li_File = FileOpen(as_PictureName, StreamMode!, Read!, LockRead!)

//Leemos los bytes del li_File
FOR li_Cnt = 1 to li_Whites
ll_ByteRead = FileRead(li_File, lblb_image)
lblb_BlobTotal = lblb_BlobTotal + lblb_image
NEXT

// Cerramos el archivo
FileClose(li_File)
ablb_data = lblb_BlobTotal

RETURN 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar