新普京网站-澳门新普京 > 前端 > MSGPACK序列和还原TFDParams【澳门新普京】,在Delphi中基于内容检测图片格式

MSGPACK序列和还原TFDParams【澳门新普京】,在Delphi中基于内容检测图片格式

2020/01/04 22:38

MSGPACK类别和回复TFDParams

type
  TGraphicFormat=(gfUnknown,gfBitmap,gfJpeg,gfPng,gfGif,gfMetafile,gfTga,gfPcx,gfTiff,gfIcon,gfCursor,gfIff,gfAni,',',');
///<summary>检查测验图片格式</summary>
///<params>
/// <param name="AStream">要检查测量检验的图片数据流</param>
///</params>
///<returns>重临能够分辨的图片格式代码</returns>
 
function DetectImageFormat(AStream:TStream):TGraphicFormat;overload;
var
  ABuf:array[0..7] of Byte;
  ARealType:String;
  AReaded:Integer;
begin
FillChar(ABuf,8,0,',',');
AReaded:=AStream.Read(ABuf[0],8,',',');
AStream.Seek(-AReaded,soFromCurrent,',','State of Qatar;//回到原有地点
if (ABuf[0]=$ff) and (ABuf[1]=$d8卡塔尔(قطر‎ then//JPEG文件头标记 (2 bytes卡塔尔国: $ff, $d8 (SOI卡塔尔国 (JPEG 文件标志卡塔尔(قطر‎
  Result:=gfJpeg
else if (ABuf[0]=$89) and (ABuf[1]=$50) and (ABuf[2]=$4E) and (ABuf[3]=$47) and (ABuf[4]=$0D) and (ABuf[5]=$0A) and (ABuf[6]=$1A) and (ABuf[7]=$0A) then
  Result:=gfPng//3.PNG文件头标记 (8 bytes卡塔尔(قطر‎   89 50 4E 47 0D 0A 1A 0A
else if (ABuf[0]=$42) and (ABuf[1]=$4D) then
  Result:=gfBitmap
else if (ABuf[0]=$47) and (ABuf[1]=$49) and (ABuf[2]=$46) and (ABuf[3]=$38) and (ABuf[4] in [$37,$39]) and (ABuf[5]=$61) then
  Result:=gfGif//GIF- 文件头标记 (6 bytes卡塔尔(قطر‎   47 49 46 38 39(37卡塔尔国 61 G   I   F     8   9 (7卡塔尔(قطر‎     a
else if (ABuf[0]=$01) and (ABuf[1]=$00) and (ABuf[2]=$00) and (ABuf[3] =$00) then
  Result:=gfMetafile//EMF 01 00 00 00
else if (ABuf[0]=$01) and (ABuf[1]=$00) and (ABuf[2]=$09) and (ABuf[3] =$00) and (ABuf[4]=$00) and (ABuf[5]=$03) then
  Result:=gfMetafile//WMF 01 00 09 00 00 03
else if (ABuf[0]=$00) and (ABuf[1]=$00) and ((ABuf[2]=$02) or (ABuf[2]=$10)) and (ABuf[3]=$00) and (ABuf[4]=$00) then
  Result:=gfTga//TGA- 未压缩的前5字节   00 00 02 00 00,TiguanLE压缩的前5字节   00 00 10 00 00
else if (ABuf[0]=$0A) then
  Result:=gfPcx //PCX - 文件头标志 (1 bytes卡塔尔(قطر‎   0A
else if ((ABuf[0]=$4D) and (ABuf[1]=$4D)) or ((ABuf[0]=$49) and (ABuf[1]=$49)) then
  Result:=gfTiff//TIFF  - 文件头标记 (2 bytes卡塔尔国   4D 4D 或 49 49
else if (ABuf[0]=$00) and (ABuf[1]=$00) and (ABuf[2]=$01) and (ABuf[3]=$00)
  and (ABuf[4]=$01) and (ABuf[5]=$00) and (ABuf[6]=$20) and (ABuf[7]=$20) then
  Result:=gfIcon//ICO - 文件头标志 (8 bytes卡塔尔国   00 00 01 00 01 00 20 20
else if (ABuf[0]=$00) and (ABuf[1]=$00) and (ABuf[2]=$02) and (ABuf[3]=$00)
  and (ABuf[4]=$01) and (ABuf[5]=$00) and (ABuf[6]=$20) and (ABuf[7]=$20) then
  Result:=gfCursor//CU陆风X8 - 文件头标志 (8 bytes卡塔尔国   00 00 02 00 01 00 20 20
else if (ABuf[0]=$46) and (ABuf[1]=$4F) and (ABuf[2]=$52) and (ABuf[3]=$4D) then
  Result:=gfIFF//IFF - 文件头标记 (4 bytes卡塔尔国   46 4F 52 4D(FORM卡塔尔(قطر‎
else if (ABuf[0]=$52) and (ABuf[1]=$49) and (ABuf[2]=$46) and (ABuf[3]=$46) then
  Result:=gfAni//11.ANI- 文件头标志 (4 bytes卡塔尔   52 49 46 46(冠道IFF卡塔尔国
else
  Result:=gfUnknown;
end;
///<summary>检查评定图片格式</summary>
///<params>
/// <param name="AFileName">要检查测验的图纸文件名</param>
///</params>
///<returns>再次来到能够识其他图片格式代码</returns>
function DetectImageFormat(AFileName:String):TGraphicFormat;overload;
var
  AStream:TStream;
begin
AStream:=TFileStream.Create(AFileName,fmOpenRead or fmShareDenyWrite,',',');
try
  Result:=DetectImageFormat(AStream,',',');
finally
  FreeAndNil(AStream,',',');
end;
end;  

unit Unit1;

以此八个函数只用于检查实验格式,具体加载,供给您创设扶植相应类其余文件实例,然后加载。就不写示例了。

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, qmsgpack, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, Datasnap.DBClient, Vcl.StdCtrls;

type
TForm1 = class(TForm)
FDQuery1: TFDQuery;
cds1: TClientDataSet;
btn1: TButton;
mmo1: TMemo;
mmo2: TMemo;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }

function ParamsToStream(aParams: TFDParams): TStream;
function StreamTOParams(Stream: TStream): TFDParams;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
TMS: TStream;
i: Integer;
str: AnsiString;
begin

with FDQuery1.Params do //创设参数
begin
Clear;
CreateParam(ftString, 'ColStr', ptInput).AsString := '字符串';
CreateParam(ftFloat, 'ColFloat', ptInput).AsFloat := 168.168;
CreateParam(ftInteger, 'ColSmallint', ptInput).AsInteger := 1234;
CreateParam(ftBoolean, 'ColBool', ptInput).AsBoolean := true;
CreateParam(ftDateTime, 'ColDatTime', ptInput).AsDateTime := now;
end;

mmo1.Clear;
mmo1.Lines.Add('连串化早前的Params'卡塔尔;
for I := 0 to FDQuery1.Params.Count - 1 do //输出
begin
with FDQuery1 do
begin
str := Format('Name:%s Value:%s DataType:%d ParamType:%d Size:%d Precision:%d NumericScale:%d', [Params[I].Name, Params[I].Value, Ord(Params[I].DataType), Ord(Params[I].ParamType), Params[I].Size, Params[I].Precision, Params[I].NumericScale]);
mmo1.Lines.Add(str)
end;
end;

TMS := ParamsToStream(FDQuery1.Params卡塔尔国;//类别化参数
FDQuery1.Params.Clear;
TMS.Position := 0;
FDQuery1.Params.Assign(StreamToParams(TMS卡塔尔国卡塔尔;//还原参数

上一篇:jpeg图片压缩新普京网站: 下一篇:Delphi实现进制转化,Web格式与TColor类型的转换函数