用ClientDataSet显示图片,使用如下方式:
        TBlobField * pField=(TBlobField *)this->cdsPerPic->FieldByName("Picture");
        TMemoryStream *pmem = new TMemoryStream();
        pField->SaveToStream(pmem);
        pField->SaveToFile("e:\\$$$temp$$#.jpg");
        TJPEGImage *pJpg = new TJPEGImage();
        try
            {
            pJpg->LoadFromStream(pmem);
            }
        catch(...)
            {
            }
图片只能显示出一部分!
请问是什么原因?有没有什么解决的办法?
谢谢!

解决方案 »

  1.   

    不会吧.你是用一个IMAGE控件显示的吗?设一下IMAGE控件的stretch或autosize属性就应该可以了吧
      

  2.   

    不是IMAGE控件显示的问题,是传下来的图像只有一部分数据,比如一人头像,只能显示上面的2/3,下面的是空的,我的图像就几十KB大小!
    我把图像保存以后也只有一部分!
      

  3.   

    我用的是JPG的图片,不知道还能怎么压缩?
    还能换控件?
    请明示!
    谢谢
      

  4.   

    用DBImage显示看看 可能在读取的时候没有读取完全 建议你这种大数据不要一次去太多 或者是用的时候再去取
      

  5.   

    不知道你链接数据库是用BDE,还是ADO,如果是BDE 有可能是BDE中配置的内存比较小,当图片较大时,保存时,只能保存图片的部分数据,数以显示出来就只能显示一半了,所以建议可以将BDE的maxBuffer修改大些。
    你可以测试一下,就是直接将图片文件通过Stream 读到image中先不存到数据库中,看看是否显示全了,如果不全就是我上面说的那个问题。
      

  6.   

    谢谢大家!
    问题已经搞定改了BDE的Bolb Size!!