分享

Delphi 实现显示和存放JPEG图形的控件

 163九九 2016-08-07

最新Delphi 实现显示和存放JPEG图形的控件

以下是三零网为大家整理的最新Delphi 实现显示和存放JPEG图形的控件的文章,希望大家能够喜欢!

 

unit JPGDBImage;
interface
uses Classes, DBCtrls, Controls, Graphics, JPEG, DB;
type
TJPGDBImage = class(TDBImage)
public
constructor Create(AOwner: TComponent); override;
end;

implementation

type
TGraphicHeader = record
Count: Word; { Fixed at 1 }
HType: Word; { Fixed at $0100 }
Size: Longint; { Size not including header }
end;

TDBPicture = class(TPicture)
public
procedure Assign(Source: TPersistent); override;
end;

{$HINTS OFF}
THackDBImage = class(TCustomControl)
private
FDataLink: TFieldDataLink;
FPicture: TPicture;
end;
{$HINTS ON}

procedure TDBPicture.Assign(Source: TPersistent);
var
BlobStream: TStream;
BMPTag: array [0..1] of Char;
AJPG: TJPEGImage;
Size, SavePos: Integer;
Header: TGraphicHeader;
begin
if (Source is TField) and (TField(Source).IsBlob) and not TField(Source).IsNull then
begin
BlobStream := TField(Source).DataSet.CreateBlobStream(TField(Source), bmRead);
try
Size := BlobStream.Size;
if Size >= SizeOf(TGraphicHeader) then
begin
BlobStream.Read(Header, SizeOf(Header));
if (Header.Count <> 1) or (Header.HType <> $0100) or
(Header.Size <> Size - SizeOf(Header)) then
BlobStream.Position := 0;
end;
SavePos := BlobStream.Position;
BlobStream.Read(BMPTag, 2);
BlobStream.Position := SavePos;
if (BMPTag[0] = 'B') and (BMPTag[1] = 'M') then
LoadFromStream(BlobStream)
else
begin
AJPG := TJPEGImage.Create;
try
AJPG.LoadFromStream(BlobStream);
inherited Assign(AJPG);
finally
AJPG.Free;
end;
end;
finally
BlobStream.Free;
end;
end
else
inherited;
end;

constructor TJPGDBImage.Create(AOwner: TComponent);
var
ADBPicture: TDBPicture;
begin
inherited;

ADBPicture := TDBPicture.Create;
ADBPicture.OnChange := THackDBImage(Self).FPicture.OnChange;
THackDBImage(Self).FPicture.Free;
THackDBImage(Self).FPicture := ADBPicture;
end;

end.  
// www.

 


延伸阅读:
·Delphi 利用 DBGrid控件实现“点击标题栏自动排序功能”
·Delphi 状态栏控件应用实例
·Delphi 控制 DBGrid控件显示单元格
·Delphi 数据库开发 Query控件 介绍
·Delphi 利用 DBGrid控件的Sort属性实现标题栏自动排序
·Delphi 控制控件随窗体变化
·Delphi 不使用第三方控件实现XP风格POP菜单
·Delphi 简易托盘图标控件(TTrayIcon)介绍
·Delphi 实现 DbGrid控件标题栏弹出菜单
·Delphi 利用 DbGrid控件隐藏或显示标题栏
·Delphi 实现在 DBGrid控件中显示图形
·Delphi 实现定制 DBGrid 控件 示例
·Delphi 在TDBGrid控件实现拖放
·Delphi 数据网格控件的6种特殊效果的实现方法
·delphi 开发透明组件(控件)示例

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多