【问题标题】:How to get dimensions of an Image which is in Clipboard?如何获取剪贴板中图像的尺寸?
【发布时间】:2014-08-17 22:50:39
【问题描述】:

我想知道剪贴板中图像的宽度和高度,因为如果尺寸太小,则会出现“图像太小”之类的消息。

如何获取宽度和高度?

【问题讨论】:

    标签: image delphi clipboard dimensions


    【解决方案1】:

    除非您准备手动解析您想要支持的各种图像格式,否则您可以让 VCL 简单地为您加载图像(只需确保已注册合适的 TGraphic 类,例如 TGIFImageTJPEGImageTPNGImage 等),然后您可以询问图像的尺寸,例如:

    uses
      Graphics, Clipbrd, Jpeg, PngImage, ...;
    
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      p: TPicture;
    begin
      p := TPicture.Create;
      try
        try
          p.Assign(Clipboard);
          // use p.Graphic, p.Graphic.Width, p.Graphic.Height as needed...
        except
          // unable to access Clipboard, or Clipboard
          // does not contain a supported image type
        end;
      finally
        p.Free;
      end;
    end;
    

    【讨论】:

    • 或者如果支持,TWICImage
    • @JerryDodge:不是上面代码的风格,不是。尽管TWICImage 支持从文件和流中加载多种图像格式,但它只支持剪贴板上的 BMP 图像,因为它的SaveToClipboardFormat()LoadFromClipboardFormat() 方法委托给内部Vcl.Graphics.TBitmap,它只支持CF_BITMAP 剪贴板格式.另外,TWICImage 没有向TPicture.RegisterClipboardFormat() 注册,所以TPicture.Assign(TClipboard) 无论如何都不会调用TWICImage
    • @JerryDodge:如果您想使用TWICImage 来保存/加载BMP 以外的格式,您可能不得不使用TWICImage.SaveToStream()TWICImage.LoadFromStream(),然后读取/写入剪贴板手动数据。
    【解决方案2】:

    如果这是关于位图的,我想你可以试试这个。

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var b:TBitmap;
    begin
      if Clipboard.HasFormat(CF_BITMAP) then begin
        b:=TBitmap.Create;
        try
          b.Assign(Clipboard);
          ShowMessage(IntToStr(b.Width)+','+IntToStr(b.Height));
        finally
          b.Free;
        end;
      end;
    end;
    

    你可以用 If 语句代替 showmessage 并做任何你想做的事情。

    【讨论】:

    • 如果你改用TPicture,你可以支持其他格式(JPG、PNG等)。
    猜你喜欢
    • 2014-03-29
    • 2013-02-21
    • 2019-12-07
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    相关资源
    最近更新 更多