文档章节

GdiPlus[52]: 图像(四) 图像信息

涂孟超
 涂孟超
发布于 2014/09/26 15:33
字数 989
阅读 13
收藏 0

相关属性、方法、函数:
IGPImage.Width;                { 宽度(单位是像素) }
IGPImage.Height;               { 高度(单位是像素) }
IGPImage.HorizontalResolution; { 获取水平分辨率(以"像素/英寸"为单位) }
IGPImage.VerticalResolution;   { 获取垂直分辨率(以"像素/英寸"为单位) }
IGPImage.RawFormat;            { 获取图像的文件格式 }
IGPImage.PixelFormat;          { 获取图像的像素格式 }
IGPImage.Flags;                { 获取图像像素的属性标志 }
IGPImage.ImageType;            { 图像类型(Bitmap/Metafile/Unknown) }
IGPImage.Palette;              { 获取或设置调色板 }

IGPImage.GetFrameCount(); { 获取帧数 }

function GetPixelFormatSize();     { 返回指定像素格式的颜色深度(每个像素的位数) }
function IsIndexedPixelFormat();   { 判断像素格式是否是索引的 }
function IsAlphaPixelFormat();     { 判断像素格式是否包含 alpha 信息 }
function IsCanonicalPixelFormat(); { 像素格式是否是每个像素 32 位(标准) }
function IsExtendedPixelFormat();  { 像素格式是否是每个像素 64 位 }

 
 
 
 
 

 

 

  

尺寸与分辨率:
uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Image: IGPImage;
  Size: TGPSizeF;
  Rect: TGPRectF;
  SrcUnit: TGPUnit;
  dx,dy: Single;
begin
  Image := TGPImage.Create('C:\GdiPlusImg\Apple.gif');
  Graphics := TGPGraphics.Create(Handle);
  Graphics.DrawImage(Image, 10, 10);

  ShowMessageFmt('Width:%d, Height:%d', [Image.Width, Image.Height]);
  { Width:120, Height:128 }
  
  Image.GetPhysicalDimension(Size);
  ShowMessageFmt('Width:%f, Height:%f', [Size.Width, Size.Height]);
  { Width:120.00, Height:128.00 }

  Image.GetBounds(Rect, SrcUnit); 
  ShowMessageFmt('Width:%f, Height: %f; 单位: %d', [Size.Width, Size.Height, Ord(SrcUnit)]);
  { Width:120.00, Height:128.00; 单位: 2 } //TGPUnit(2) = UnitPixel;

  dx := Image.HorizontalResolution;
  dy := Image.VerticalResolution;
  ShowMessageFmt('水平分辨率: %f, 垂直分辨率: %f', [dx, dy]);
  { 水平分辨率: 96.00, 垂直分辨率: 96.00 }
end;

 
 
 
 
 

 

 

  

文件格式:
uses GdiPlus;

procedure TForm1.Button1Click(Sender: TObject);
var
  Image: IGPImage;
  f: string;
begin
  Image := TGPImage.Create('C:\GdiPlusImg\Bird.bmp');

  if IsEqualGUID(Image.RawFormat, ImageFormatUndefined) then f := 'Undefined';
  if IsEqualGUID(Image.RawFormat, ImageFormatMemoryBMP) then f := 'MemoryBMP';
  if IsEqualGUID(Image.RawFormat, ImageFormatBMP)       then f := 'BMP';
  if IsEqualGUID(Image.RawFormat, ImageFormatEMF)       then f := 'EMF';
  if IsEqualGUID(Image.RawFormat, ImageFormatWMF)       then f := 'WMF';
  if IsEqualGUID(Image.RawFormat, ImageFormatJPEG)      then f := 'JPEG';
  if IsEqualGUID(Image.RawFormat, ImageFormatPNG)       then f := 'PNG';
  if IsEqualGUID(Image.RawFormat, ImageFormatGIF)       then f := 'GIF';
  if IsEqualGUID(Image.RawFormat, ImageFormatTIFF)      then f := 'TIFF';
  if IsEqualGUID(Image.RawFormat, ImageFormatEXIF)      then f := 'EXIF';
  if IsEqualGUID(Image.RawFormat, ImageFormatIcon)      then f := 'Icon';

  ShowMessage(f); { BMP }
end;

 
 
 
 
 

 

 

  

像素格式:
uses GdiPlus;

procedure TForm1.Button1Click(Sender: TObject);
var
  Image: IGPImage;
  pf: string;
begin
  Image := TGPImage.Create('C:\GdiPlusImg\Bird.bmp');

  case Image.PixelFormat of
    PixelFormat1bppIndexed    : pf := 'PixelFormat1bppIndexed';
    PixelFormat4bppIndexed    : pf := 'PixelFormat4bppIndexed';
    PixelFormat8bppIndexed    : pf := 'PixelFormat8bppIndexed';
    PixelFormat16bppGrayScale : pf := 'PixelFormat16bppGrayScale';
    PixelFormat16bppRGB555    : pf := 'PixelFormat16bppRGB555';
    PixelFormat16bppRGB565    : pf := 'PixelFormat16bppRGB565';
    PixelFormat16bppARGB1555  : pf := 'PixelFormat16bppARGB1555 ';
    PixelFormat24bppRGB       : pf := 'PixelFormat24bppRGB';
    PixelFormat32bppRGB       : pf := 'PixelFormat32bppRGB';
    PixelFormat32bppARGB      : pf := 'PixelFormat32bppARGB';
    PixelFormat32bppPARGB     : pf := 'PixelFormat32bppPARGB';
    PixelFormat48bppRGB       : pf := 'PixelFormat48bppRGB';
    PixelFormat64bppARGB      : pf := 'PixelFormat64bppARGB';
    PixelFormat64bppPARGB     : pf := 'PixelFormat64bppPARGB';
  end;

  ShowMessage(pf); { PixelFormat8bppIndexed }
end;

 
 
 
 
 

 

 

  

像素属性:
uses GdiPlus;

procedure TForm1.Button1Click(Sender: TObject);
const
  n = sLineBreak;
var
  Image: IGPImage;
  f: TGPImageFlags;
  s: string;
begin
  Image := TGPImage.Create('C:\GdiPlusImg\Bird.bmp');
  f := Image.Flags;

  if TGPImageFlag(0)  in f then s := s + 'ImageFlagsScalable'          + n;
  if TGPImageFlag(1)  in f then s := s + 'ImageFlagsHasAlpha'          + n;
  if TGPImageFlag(2)  in f then s := s + 'ImageFlagsHasTranslucent'    + n;
  if TGPImageFlag(3)  in f then s := s + 'ImageFlagsPartiallyScalable' + n;
  if TGPImageFlag(4)  in f then s := s + 'ImageFlagsColorSpaceRGB'     + n;
  if TGPImageFlag(5)  in f then s := s + 'ImageFlagsColorSpaceCMYK'    + n;
  if TGPImageFlag(6)  in f then s := s + 'ImageFlagsColorSpaceGRAY'    + n;
  if TGPImageFlag(7)  in f then s := s + 'ImageFlagsColorSpaceYCBCR'   + n;
  if TGPImageFlag(8)  in f then s := s + 'ImageFlagsColorSpaceYCCK'    + n;
  if TGPImageFlag(12) in f then s := s + 'ImageFlagsHasRealDPI'        + n;
  if TGPImageFlag(13) in f then s := s + 'ImageFlagsHasRealPixelSize'  + n;
  if TGPImageFlag(16) in f then s := s + 'ImageFlagsReadOnly'          + n;
  if TGPImageFlag(17) in f then s := s + 'ImageFlagsCaching'           + n;

  ShowMessage(s);
  { ImageFlagsColorSpaceRGB / ImageFlagsHasRealPixelSize / ImageFlagsReadOnly }
end;

 
 
 
 
 

 

 

  

图像类型:
uses GdiPlus;

procedure TForm1.Button1Click(Sender: TObject);
var
  Image: IGPImage;
  str: string;
begin
  ChDir('C:\GdiPlusImg\');
  Image := TGPImage.Create('SampleMetafile.emf');

  case Image.ImageType of
    ImageTypeUnknown : str := 'Unknown';
    ImageTypeBitmap  : str := 'Bitmap';
    ImageTypeMetafile: str := 'Metafile';
  end;
  ShowMessage(str); { Metafile }
end;

 
 
 
 
 

 

 

  

几个图像相关的全局函数:
uses GdiPlus;

procedure TForm1.Button1Click(Sender: TObject);
var
  Image: IGPImage;
  n: Integer;
  b: Boolean;
begin
  Image := TGPImage.Create('C:\GdiPlusImg\Grapes.jpg');

  { 每个像素的大小 }
  n := GetPixelFormatSize(Image.PixelFormat);
  ShowMessage(IntToStr(n)); { 24 }

  { 是否使用了索引色 }
  b := IsIndexedPixelFormat(Image.PixelFormat);
  ShowMessage(BoolToStr(b, True)); { False }

  { 是否包含透明信息 }
  b := IsAlphaPixelFormat(Image.PixelFormat);
  ShowMessage(BoolToStr(b, True)); { False }

  { 是否是 32 位 }
  b := IsCanonicalPixelFormat(Image.PixelFormat);
  ShowMessage(BoolToStr(b, True)); { False }

  { 是否是 64 位 }
  b := IsExtendedPixelFormat(Image.PixelFormat);
  ShowMessage(BoolToStr(b, True)); { False }
end;

 
 
 
 
 

 

 

  

是否是多帧图像(只有 TIFF 和 GIF 才可能是多帧):
uses GdiPlus;

procedure TForm1.Button1Click(Sender: TObject);
var
  Tiff,Gif: IGPImage;
  n: Integer;
begin
  Tiff := TGPImage.Create('C:\GdiPlusImg\MultiFrame.tif');
  Gif := TGPImage.Create('C:\GdiPlusImg\Apple.gif');

  if IsEqualGUID(Tiff.RawFormat, ImageFormatTIFF) then
  begin
    n := Tiff.GetFrameCount(FrameDimensionPage);
    ShowMessage(IntToStr(n)); //4
  end;

  if IsEqualGUID(Gif.RawFormat, ImageFormatGIF) then
  begin
    n := Gif.GetFrameCount(FrameDimensionTime);
    ShowMessage(IntToStr(n)); //1
  end;
end;

 
 
 
 
 

 

 

  

调色板:
uses GdiPlus;

procedure TForm1.Button1Click(Sender: TObject);
var
  Image: IGPImage;
  Palette: IGPColorPalette;
  i: Integer;
  str: string;
begin
  Image := TGPImage.Create('C:\GdiPlusImg\Stripes.bmp');
  Palette := Image.Palette;
  ShowMessage(IntToStr(Image.Palette.Count)); //5; 若是 0 表示无调色板

  { 也可用下面这句判断是否使用了索引色(或者说调色板) }
  //if not IsIndexedPixelFormat(Image.PixelFormat) then Exit;

  { 以字符串的形式获取调试板中的所有颜色 }
  for i := 0 to Palette.Count - 1 do
  begin
    str := str + Format('$%.8X', [Palette.Entries[i]]) + sLineBreak;
  end;
  ShowMessage(str); { $FF000000/$FFFFFFFF/$FF0000FF/$FF00FF00/$FFFF0000 }
end;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/12/28/1634453.html

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
VC实现多格式图像的转换

色彩鲜艳漂亮的高品质图像,一个个形象生动的Windows图标,高速运动、活灵活现的三维动画,这些无一不显示出程序设计者的艺术才华。在程序设计中,图像处理已经成为每个程序员的必修课。 在V...

余二五
2017/11/06
0
0
Wine 1.1.21 发布

Wine 1.1.21 现已发布。本版本主要带来了以下改进: 初步支持 shader model 4 能够从 X11 程序中复制/粘贴图像 对 GDIPlus 进行了改善 winemaker 支持 64 位 有关此版本的更新详情,可以查阅...

红薯
2009/05/10
144
0
DotNetCore跨平台~System.DrawingCore部署Linux需要注意的

你在windows上使用图像组件没有任务问题,但部署到linux之后,将注意以下几点: 安装nuget包ZKWeb.System.Drawing 项目里还是引用System.DrawingCore,这点不用改 安装gdiplus插件,这个需要...

mcy247
2017/12/05
0
0
图表编辑器TMS Diagram Studio更新至v4.14,支持RAD Studio 10.2 Tokyo

TMS Diagram Studio是一款功能强大的图表控件,专为您的应用程序添加示意图和流程图表。 TMS Diagram Studio点击下载>>> v4.14 改进:更改handle检测的顺序。 修复:预览/打印错误。 修复:T...

Harriet666
2017/10/19
36
0
视觉类比VISALOGY: Answering Visual Analogy Questions--NIPS2015

本文是NIPS2015的一篇文章,整篇文章主要是解决一个视觉类比问题。 摘 要: 视觉类比问题非常值得研究。这个研究问题主要是:图像A类比图像B,那么图像C类比什么图像。视觉类比问题主要是深入...

hlx371240
2016/10/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Nginx 快速安装详解

一、Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамбле...

网络小虾米
16分钟前
4
0
技术分享 | slave_relay_log_info 表认知的一些展开

作者:胡呈清 slave_relay_log_info 表是这样的: mysql> select * from mysql.slave_relay_log_info\G *************************** 1. row *************************** Number_of_lin......

爱可生
19分钟前
3
0
nginx配置http访问自动跳转到https

server {listen 80;server_name www.域名.com;rewrite ^(.*) https://$server_name$1 permanent;}server {listen 443;server_name www.域名.com;root /home/www;ssl on;......

很好亦平凡ms
19分钟前
3
0
SpreadJS:一款中国研发的类Excel开发工具,功能涵盖Excel的 95% 以上

Excel 作为一款深受用户喜爱的电子表格工具,借助其直观的界面、出色的计算性能、数据分析和图表,已经成为数据统计领域不可或缺的软件之一。 基于Excel对数据处理与分析的卓越表现,把Excel...

葡萄城技术团队
19分钟前
2
0
用javafx框架tornadofx做了个天气预报的程序

class WeatherApp : App(WeatherView::class)class WeatherView : View("十五天天气预报") { val weatherVM: WeatherViewModel by inject() val controller: WeatherController by......

oschina4cyy
23分钟前
3
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部