原来的代码是这样的:...
form1.videocap1.SaveToClipboard;
form1.Image1.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);
jpg.Assign(form1.Image1.Picture.Bitmap);
jpg.CompressionQuality := 10;
jpg.JPEGNeeded;
jpg.Compress;
jpg.SaveToStream(memStream);
...通过一个IMAGE控件,但我想直接从剪贴板里得到这个图片,怎么做?

解决方案 »

  1.   

    就是直接把ClipBoard的内容附给jpg.Assign里的参数。
      

  2.   

    Function Tmain.BMPTOJPG(BmpFile,JpgFile:pchar;Quality:word):integer;
    Var
      Bmp:TbitMap;
      Jpeg:TJPEGImage;
    Begin
      Bmp:=nil;
      Jpeg:=nil;
      If (Trim(BmpFile) = '') or (Trim(JpgFile) = '') then
        Begin
          Result:=-2;
          Exit;
        End;
      Try
        Begin
          Bmp:=Tbitmap.create; //建立bitmap类实例
          Bmp.LoadFromFile(BmpFile); //读入Bmp文件
        End;
      Except
        Begin
          If Bmp<>nil then
            Bmp.Free; //释放Bitmap类
          Result:=-1;
          Exit;
        End;
      End;
      Try
        Begin
          Jpeg:=TjpegImage.Create; //建立TjpegImage类实例
          Jpeg.Assign(Bmp); //复制图像数据
          Jpeg.compressionQuality:=Quality; //设置压缩率
          Jpeg.SaveToFile(JpgFile); //图像压缩后存盘
        End;
      Except
        Begin
          If Bmp<>nil then
            Bmp.Free;
          If Jpeg<>nil then
            Jpeg.Free; //释放TjpegImage类
          Result:=-3;
          Exit;
        End;
      End;
      Bmp.Free;
      Jpeg.Free;
      Result:=0;
    End;
      

  3.   

    楼上的,有点敬业精神好不好。但我需要从剪贴板中得到BMP,而且是通过JPG.Assign函数。因为 JPG.Assign(ClipBoard); 不能执行。
    但 Bitmap.Assign(ClipBoard); 能执行,是因为格式的问题么。
      

  4.   

    你可以创建一个临时的bmp变量,从剪贴板读出图像后,再用JPG.Assign(bmp)啊。procedure TForm1.Button2Click(Sender: TObject);
    var
      jpg:TJPEGImage;
      bmp:TBitmap;
    begin
      bmp:=TBitmap.Create;
      try
        bmp.Assign(Clipboard);
        jpg:=TJPEGImage.Create;
        try
          jpg.Assign(bmp);
          jpg.CompressionQuality := 10;
          jpg.Compress;
          jpg.SaveToFile('test.jpg');
        finally
          jpg.Free;
        end;
      finally
        bmp.Free;
      end;end;
      

  5.   

    不是这样的,我不想用中间的BMP变量来过度。
      

  6.   

    你想直接用jpg.assign应该是不可能的。你看看TJPETImage.Assign方法的实现:procedure TJPEGImage.Assign(Source: TPersistent);
    begin
      if Source is TJPEGImage then
      begin
        FImage.Release;
        FImage := TJPEGImage(Source).FImage;
        FImage.Reference;
        if TJPEGImage(Source).FBitmap <> nil then
        begin
          NewBitmap;
          FBitmap.Assign(TJPEGImage(Source).FBitmap);
        end;
      end
      else if Source is TBitmap then
      begin
        NewImage;
        NewBitmap;
        FBitmap.Assign(Source);
      end
      else
        inherited Assign(Source);
    end;