哪位高手能把下列delphi代码给转成vc,小女子先有礼了
获取JPEG的宽度、高度等信息
{ Copyright Kingron 2002 }
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, LenLo: 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;
获取JPEG的宽度、高度等信息
{ Copyright Kingron 2002 }
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, LenLo: 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;
解决方案 »
- arial字体遇到不支持的字符集怎么办
- 再添加类文件时提示错误。
- SetWindowPos
- delphi 集合类型
- 为什么我一ShowModalForm(FRM),就抱'Canot make a visible window Modal'错误
- fastreport问题
- MDI主窗体FormStyle:=bsNone,子窗体最大化子窗体不见了.
- Tstrings and Tstringlist
- 请问各位大侠,在哪儿有关于DBChart的介绍?或者,有没有更好的控件,可以实现图形显示?
- 如何用Delphi来实现将查询的内容写入word中
- AdvStringGrid控件怎么用?
- 如果改变硬盘的电源模式D0~D3
以上功能应该很好实现了
#define JPEG_FLAG_BEGIN 0xD8FF
#define JPEG_FLAG_END 0xD9FF
#define JPEG_FRAME 0xC0FF typedef
struct _tagSegHeader{
unsigned short Flag;
unsigned char LenHi, LenLo;
}TSegHeader;
void SeekForFrame(HADNLE FS){
TSegHeader Seg;
DWORD nByte;
do{
nByte = 0;
ReadFile(FS,&Seg, sizeof(Seg), &nByte, NULL);
if (Flag != JPEG_FRAME )
SetFilePointer(FS, MAKEWORD(Seg.LenLo, Seg.LenHi) - 2, NULL, FILE_CURRENT);
}while (!(SetFilePointer(FS, 0, NULL, FILE_CURRENT)>= GetFileSize(Fs)) || (Seg.Flag == JPEG_FRAME));
} bool GetJPEGSize(char FileName[],unsigned short &Width, unsigned short &Height){
HANDLE FS;
unsigned short Flag1, Flag2;
unsigned char B;
DWORD nByte;
FS = CreateFile(FileName,
GENERIC_READ,
FILE_SHARE_READ ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (FS == INVALID_HANDLE_VALUE) return false;
__try{
/* JPEG 文件开头必须为 FF D8,文件尾必须为 FF D9 */
nByte = 0;
ReadFile(FS,&Flag1, sizeof(Flag1), &nByte, NULL);
//FS.Position := FS.Size - 2;
SetFilePointer(FS, -2, NULL, FILE_END);
//FS.Read(Flag2, SizeOf(Flag2));
nByte = 0;
ReadFile(FS,&Flag2, sizeof(Flag2), &nByte, NULL);
Result := ;
if (!((Flag1 == JPEG_FLAG_BEGIN) && (Flag2 == JPEG_FLAG_END))) return false; /* 不是合法的JPEG文件则退出 */
//FS.Position := 2;
SetFilePointer(FS, 2, NULL, FILE_BEGIN);
SeekForFrame(FS); /* 寻找JPEG的Frame段,即图像数据区 */
nByte = 0;
ReadFile(FS, &B, sizeof(B), &nByte, NULL); /* Frame段段头后第一个Byte为数据精度 */
nByte = 0;
ReadFile(FS, &B, sizeof(B), &nByte, NULL); /* 高度高字节 */
//WordRec(Height).Hi := B;
Heigth = /*Heigth & 0xff +*/ (unsigned short)B << 8;
nByte = 0;
ReadFile(FS, &B, sizeof(B), &nByte, NULL); /* 高度低字节 */
Height = Heigth & 0xff00 + B;
nByte = 0;
ReadFile(FS, &B, sizeof(B), &nByte, NULL); /* 宽度高字节 */
Width = /*Width & 0xff +*/ (unsigned short)B << 8;
nByte = 0;
ReadFile(FS, &B, sizeof(B), &nByte, NULL); /* 宽度低字节 */
Width = Width & 0xff00 + B;
}__finally {
CloseHandle(FS);
}
} 留一段你自己翻译
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;