永发信息网

delphi怎么读取jpg等图片文件的属性

答案:2  悬赏:0  手机版
解决时间 2021-03-18 11:40
delphi怎么读取jpg等图片文件的属性
最佳答案
function GetJPEGSize(FileName: string; var Width, Height: WORD): Boolean;
const
JPEG_FLAG_BEGIN = $D8FF;
JPEG_FLAG_END = $D9FF;
JPEG_FRAME = $C0FF;
var
FS: TFileStream;
Flag1, Flag2: WORD;
B: Byte;

procedure SeekForFrame;
type
TSegHeader = packed record
Flag: WORD;
LenHi, LenL Byte;
end;
var
Seg: TSegHeader;
begin
with Seg, FS do
repeat
Read(Seg, SizeOf(Seg));
if Flag <> JPEG_FRAME then
Position := Position + MakeWord(LenLo, LenHi) - 2;
until (Position >= Fs.Size) or (Seg.Flag = JPEG_FRAME);
end;

begin
FS := TFileStream.Create(FileName, fmOpenRead);
try
{ JPEG 文件开头必须为 FF D8,文件尾必须为 FF D9 }
FS.Read(Flag1, SizeOf(Flag1));
FS.Position := FS.Size - 2;
FS.Read(Flag2, SizeOf(Flag2));
result := (Flag1 = JPEG_FLAG_BEGIN) and (Flag2 = JPEG_FLAG_END);
if not result then exit; { 不是合法的JPEG文件则退出 }

FS.Position := 2;
SeekForFrame; { 寻找JPEG的Frame段,即图像数据区 }
FS.Read(B, SizeOf(B)); { Frame段段头后第一个Byte为数据精度 }

FS.Read(B, SizeOf(B)); { 高度高字节 }
WordRec(Height).Hi := B;
FS.Read(B, SizeOf(B)); { 高度低字节 }
WordRec(Height).Lo := B;

FS.Read(B, SizeOf(B)); { 宽度高字节 }
WordRec(Width).Hi := B;
FS.Read(B, SizeOf(B)); { 宽度低字节 }
WordRec(Width).Lo := B;
finally
FS.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
W, H: Word;
begin
with OpenDialog1 do
if Execute then
if GetJPEGSize(FileName, W, H) then
Caption := Format('Yes,W:%d,H:%d', [W, H])
else Caption := 'No';
end;
全部回答
因为最后一张图片正在被你的程序使用中,无法删除
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天运五行属水时,乃是人间一富翁。
丝思地址有知道的么?有点事想过去
列举隋朝书法家有那些?
燃煤锅炉改造社会效益指标有哪些
信友通讯这个地址在什么地方,我要处理点事
谁家有漂亮可爱的七八岁小女孩
网上说的九成新走私二手车可以买吗
古代著名的名人名派
肠粉专用的鼓油是什么
豪泰大酒店这个地址在什么地方,我要处理点事
从北京托运一电动车到四川去,物流公司是怎么
新民杂货店地址在哪,我要去那里办事
寄一张明信片8毛钱邮政有利润么?利润点在哪
有没有人打倒过仙剑四里的火玄霄?
捷达伙伴和前卫哪个好
推荐资讯
使用手机的必要性
泉州牙科.谁来还我的牙?
关公像手里的大刀有的在后面 有的在身体侧面
A交(B-C)=(A交B)-(A交C)
马兰仕PM7200功放配什么音响最好
广州中山大学眼科中心的官网是
赤兔殉主 三国人名一
在一起1年多多的男朋友,在一起过第一个情人
一首英文歌 男声,歌词ready go
笔记本加装固态硬盘后系统问题,我的笔记本想
世伟洛克产品好不好?
中条山山脉这个地址在什么地方,我要处理点事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?