大于32K的jpg图片显示问题

sugar900 2007-07-17 12:55:24
blob lb_tmp
blob b

integer li_FileNum,loops,i
long flen

SELECTBLOB markbody INTO :lb_tmp from dzb_signature where signatureid=50;

li_FileNum = FileOpen( &
"C:\EMP_PICS.jpg", &
STREAMMode!,Write!,Shared!,REPLACE!)

flen=len(lb_tmp)
messagebox("blob",flen)
IF flen > 32765 THEN
IF Mod(flen, 32765) = 0 THEN
loops = flen/32765
ELSE
loops = (flen/32765) + 1
END IF
FOR i = 1 to loops
b = blobmid(lb_tmp,32765 * (i - 1) + 1,32765)
//messagebox("",len(b))
integer n
FileWrite(li_FileNum,b)
//FileWrite
NEXT
ELSE
FileWrite(li_FileNum, lb_tmp)
END IF

FileClose(li_FileNum)

messagebox("jpg",Filelength("C:\EMP_PICS.jpg"))

/==================================================

大于32K的显示却总是叉叉,小于32765 的可以正常显示

但是,从前后的字节数判断,比如长度都是32767 .可以判断已经成功存入文件。

请问高手,问题出在哪了,怎么解决?
...全文
478 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangyafei 2007-07-18
  • 打赏
  • 举报
回复
首先通过SQL语法查询一BLOB字段的长度,确保数据已更新成功.
若更新进去,可能只是取数据时出问题了.我曾遇到该问题.发现selectbolb 取大于32K的流数据时,只能取到32K.
后无意间发现,这个问题在源代码运行时有该问题.编译后的执行程序无该现象.将PB的支持库DLL文件拷到源程序的目录下.好像可以保证源代码执行没有问题.
sugar900 2007-07-17
  • 打赏
  • 举报
回复

第1个方法好象不行,setpicture()要死机,因为大于32K
第2个方法我也是没问题的。

有个情况说明一下,表里原来的图片不是用pb读进去的。这样会有影响吗?
但是小于32K的都没有影响。
zhgwbzhd 2007-07-17
  • 打赏
  • 举报
回复
你的代码应该说没有问题了。
我猜测有可能你数据库中的保存的二进制格式有点问题了。
你可以采取两种方法测试一下:
1、把数据库中读取的照片,使用picture控件进行显示一下,看看是不是正常。
2、直接读取本地的照片,利用循环把该照片的所有流都加起来,之后再利用你的循环拆分一下,看看能不能形成另外的一个照片。

第二个我测试过了,没问题的。

1,077

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧