高手好请一定帮忙,急呀:
PB中的picture控件加载用PB转出来的JPG图片时出现:Not a JPEG file:starts with 0x42 0x4d错误。
这个JPG图片是我用PB在数据库中二进制转过来的。但我发现这种转出来的JPG,不能用PHOTOSHOP打开,于是我怀疑是PB本身的问题(转出来的JPG是个伪JPG),但后面我用C#写的一个转JPG的文件,发现也是一样不能用PHOTOSHOP打开,同样不能在PB中用picture控件打开,一打开便会出现上面的错误。所以我想应该是别的什么原因,因为我以前的一个同事用JAVA写的转JPG的程序转出来就可以在PB中打开 。经过仔细对比发现即使同一个二进制文件转出来的JPG尺寸也不一样(pb\c#的尺寸是:102*126而JAVA是:295*413),并且JAVA转出来的可以用PHOTOSHOP打开,而我用PB、C#转出来的却不能,麻烦各位大虾PB高手帮忙指点。
------解决方案--------------------
文件格式有错吧?
帮顶.
------解决方案--------------------
你用pb的处理只是从数据库中取出来而已,并没有做什么转换
这样问题就容易解决多了
没仔细看你的程序
你可以先转换一个比较小的(小于32K),看看对不对
另外你可以把数据库中取出来的数据写到文件中,和你同事用java转出来的也写到文件中
对这两个文件进行二进制比较看看有什么差异
------解决方案--------------------
把fileopen中的replace!改为append!,并且,没处理完一张相片,将JPG文件清一下,看看。
------解决方案--------------------
如果晚上你这贴还没有结果,我再在晚上用代码试试。
------解决方案--------------------
呵呵,我一晚上就 在搞这个。怎么我存储的JPG就没有一点问题呢?
我在PB中,先用UpdateBlob存几张JPG进数据库,然后用你的代码读出来保存在硬盘,没有一点问题啊。FileOpen时,我用的是Append!,也应该与这个无关。
------解决方案--------------------
你能保证你数据库里的JPG数据没问题吗?
不妨自己用PB存一些照片进去,然后再取出来,看看有没有相同的问题。
我做了一晚上,没碰到什么问题,很正常。
------解决方案--------------------
我刚才用了一个ICO文件,做试验,结果出现类似于你的错误。可见。。。。。。
另外,如果用PB10的话,已经有FileReadEx(),返回值是LONG,所以简单多了。
------解决方案--------------------
请注意:...用一个插件把二进制图片转到服务器变成JPG文件...
如果这个插件对图片进行了处理的话,直接取出来是不行的,还是要通过这个插件再倒出来。
直接取出的前提是,存进数据库的时候没有经过任何中间控件的处理过程,就是直接读取文件的二进制数据到 blob,然后立即通过 updateblob 传给数据库。
------解决方案--------------------
selectblob后ld_Len是多少?
你用什么方法存入数据库的?
显然你的写法,文件大于64k的内容会被你丢弃。
------解决方案--------------------
测试一下在updateblob之前lb_image的长度,以及是为NULL。
如果是10以上的版本,最好是用filereadex和filewriteex.
------解决方案--------------------
文件保存后,能用ACDSEE看到图片不?
------解决方案--------------------
文件格式有错? Not a JPEG file:starts with 0x42 0x4d错误。
你用记事本打开图片文件,看它的前缀是什么?如果不是0x42 0x4d,说明该图片不是真正的jpeg文件格式。换一张别的JPEG图片试试。
------解决方案--------------------
很久没来过了,看看现在年轻人很猛啊。
------解决方案--------------------
记事本打开前两个字节是bm的话,这文件应该实际是bmp图片,你可以把它存成.bmp的扩展名试一下
你的update我看了,我希望望你确认一下,
到底updateblob和selectblob以及filelength三个取到的值是否一样,
你那样只能确保到blob变量正确,但是dbms的参数会影响最大updateblob的长度
尤其是sql server之类的数据库
------解决方案--------------------
强大个头阿,bmp转jpg还不网上一艘一大堆,只是你孤陋寡闻而已
而且你根本没必要转jpg,你直接用p_1.setpicture(yourfileblob)
pb的这个blob直接支持BMP,GIF, JPEG, RLE,WMF五种格式,ok?
------解决方案--------------------
------解决方案--------------------
dll不会调用请开新贴,呵呵。
------解决方案--------------------