【发布时间】:2014-08-17 22:50:39
【问题描述】:
我想知道剪贴板中图像的宽度和高度,因为如果尺寸太小,则会出现“图像太小”之类的消息。
如何获取宽度和高度?
【问题讨论】:
标签: image delphi clipboard dimensions
我想知道剪贴板中图像的宽度和高度,因为如果尺寸太小,则会出现“图像太小”之类的消息。
如何获取宽度和高度?
【问题讨论】:
标签: image delphi clipboard dimensions
除非您准备手动解析您想要支持的各种图像格式,否则您可以让 VCL 简单地为您加载图像(只需确保已注册合适的 TGraphic 类,例如 TGIFImage, TJPEGImage、TPNGImage 等),然后您可以询问图像的尺寸,例如:
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
TWICImage 支持从文件和流中加载多种图像格式,但它只支持剪贴板上的 BMP 图像,因为它的SaveToClipboardFormat() 和LoadFromClipboardFormat() 方法委托给内部Vcl.Graphics.TBitmap,它只支持CF_BITMAP 剪贴板格式.另外,TWICImage 没有向TPicture.RegisterClipboardFormat() 注册,所以TPicture.Assign(TClipboard) 无论如何都不会调用TWICImage。
TWICImage 来保存/加载BMP 以外的格式,您可能不得不使用TWICImage.SaveToStream() 和TWICImage.LoadFromStream(),然后读取/写入剪贴板手动数据。
如果这是关于位图的,我想你可以试试这个。
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等)。