大家好,本人碰到一个问题,用image 显示剪贴板的图片,显示正常: img1.Picture.Assign(Clipboard);
随后把图片的内容存在本地盘
img1.Picture.SaveToFile('c:\12.jpg');
再次打开,
img1.Picture.LoadFromFile('c:\12.jpg');
缺提示错误 "JPEG ERROR #42"
请问,这个文件该怎么保存和打开他呢

解决方案 »

  1.   

      img1.Picture.Assign(clipboard);
      img1.Repaint;   //这一句话非常重要,没有不行!
      img1.Picture.SaveToFile('c:\12.jpg');//以上代码测试通过,可成功保存
      

  2.   

    楼主,把你的代码中的('c:\12.jpg');换成('c:\12.bmp');于是问题解决。导致原因:格式错误。剪贴板中不可能存储jpg图片,只能存储bmp
      

  3.   

    这个确实比较怪,我把他存为.WMF格式就没有问题了。
    存为。jpg的话,用image是loadfromfile不了,不过用画板是可以打开的。
      

  4.   


    一点都不怪!
    看来你还没有听明白!剪贴板中只能存bmp(注意这句话),你另存为wmf(或jpg)后实际还是一个bmp(就等于你把bmp改了扩展名成了wmf一个道理),它并不是一个真实的wmf。实际就是等于你把一个bmp文件改成了其它扩展名,而画图可以识别它支持的扩展名(它不是以扩展名来区别文件类型的,而是内部读文件标识),但delphi是以扩展名来区别文件的。所以delphi把一个假的jpg(实际剪切板直接保存得到的永远是bmp)当成jpg来读当然不行了,会报错。区分一个文件的类型有两种方法,一种是读文件内部标识,一种是看扩展名。前者比较准确但不直观不方便,后者比较简单但此时如果我把一个exe改成jpg那不就没法了?
    而画图是以第一种方式来区分文件格式的,所以你另存为什么格式都可以,前提是只要图片支持的那几种格式它都可以识别,而delphi是以第二种方式(以扩展名)来区分文件格式,所以delphi只能存不能读。其实他也不能存,存的是一个假文件,实际它永远是bmp文件。