bmp := TBitmap.Create;
bmp.Assign(image1.Picture);////这句出错了,cannot assign TPicture to TBitmap
这该怎么解决呢?我想做的是:从Clipboard中读出图片.如果直接用bmp.Assign(Clipboard);也是同样的错误.

解决方案 »

  1.   

    这样不行.得到的是空的===
    你从哪看出是空的的?
    你save一下看对不对
      

  2.   

    空的?你确定你的image中有图片?
    var
      bmp:TBitmap;
    begin
      bmp:= TBitmap.Create;
      bmp.Assign( Image1.Picture.Bitmap );
      bmp.SaveToFile( 'c:\1.bmp' );
      bmp.Free;
    end;
      

  3.   

    奇怪了,不知是哪出错了.
    如果只有这句:image1.Picture.Assign(Clipboard);,image1里显示正常.
    如果是这样:
        image1.Picture.Assign(Clipboard);
        bmp := TBitmap.Create;
        bmp.Assign(image1.Picture.Bitmap);
    很奇怪的问题,image1里什么都没有了.
      

  4.   

    image1.Picture.Assign(Clipboard);
    image2.Picture.Assign(Clipboard);
        bmp := TBitmap.Create;
        bmp.Assign(image1.Picture.Bitmap);这代码的结果是:image1是空的,image2是有图片的.这是什么原因呀
      

  5.   

    如果你看过TPicture控件的源码,你就会知道了,TPicture获取图片有两个方式,一种是获取JPEG,它会存放在TJPEGImage中,一种是获取Bitmap,它会存放在TBitmap中.如果你Load的图片格式是JPEG,那么TBitmap的实例就会为空,相反,如果Load的图片格式是Bitmap,TJPEGImage的实例也会为空.下面的代码可以确保无论Load的图片格式是JPEG还是Bitmap,都会LoadTBitmap的实例里,这样的话,当你再次调用Image1.Picture.Bitmap.SaveToFile时就不会出错(Image1是TPicture的实例),而且保存图片格式是Bitmap.
    procedure TImageEditorForm.OpenImage(FileName: string);
    var
     NewBmp: TBitmap;
     NewJpeg: TJPEGImage;
    begin
     NewBmp := TBitmap.Create;
     NewJpeg := TJPEGImage.Create;
     try
     if ExtractFileExt(FileName) = '.bmp' then
     begin
      NewBmp.LoadFromFile(FileName);
      Image1.Picture.Bitmap.Assign(NewBmp);
      end
      else begin
       NewJpeg.LoadFromFile(FileName);
       Image1.Picture.Bitmap.Assign(NewJpeg);
      end;
     finally
      NewBmp.Free;
      NewJpeg.Free;
     end;
    end;