Image1: TImage; ... Image1.Picture.LoadFromFile(Filename); if Image1.Picture.Graphic is TJPEGImage then with TJPEGImage(Image1.Picture.Graphic) do begin h:=Height; w:=Width; end;
easy: uses jpeg; .......... Image1.AutoSize:=True; Image1.Picture.LoadFromFile(jpegfilename); Image1.Width;//width of jpeg picture. Image1.Height;//height of jpeg picture.
通用做法 var Picture:TPicture;Picture.LoadFromFile(Filename); Picture.Graphic.Height Picture.Graphic.Width确定是JPEG时 var JPEG:TJPEGImage;JPEG.LoadFromFile(Filename); JPEG.Height JPEG.Width写过,看过图像解码程序吗?你以为这些信息是哪来的?还不是从文件中读取出来的!不建议使用 blazingfire的方法,控件的大小是可以改变!虽然在AutoSize=True时,他们相等,但毕竟不是图像长宽!不要舍近求远了,要讲究开发效率!但如果是作为技术研究,你应该自己去把长宽变为16进制到文件中去比对!
...
Image1.Picture.LoadFromFile(Filename);
if Image1.Picture.Graphic is TJPEGImage then
with TJPEGImage(Image1.Picture.Graphic) do begin
h:=Height;
w:=Width;
end;
uses jpeg;
..........
Image1.AutoSize:=True;
Image1.Picture.LoadFromFile(jpegfilename);
Image1.Width;//width of jpeg picture.
Image1.Height;//height of jpeg picture.
var Picture:TPicture;Picture.LoadFromFile(Filename);
Picture.Graphic.Height
Picture.Graphic.Width确定是JPEG时
var JPEG:TJPEGImage;JPEG.LoadFromFile(Filename);
JPEG.Height
JPEG.Width写过,看过图像解码程序吗?你以为这些信息是哪来的?还不是从文件中读取出来的!不建议使用 blazingfire的方法,控件的大小是可以改变!虽然在AutoSize=True时,他们相等,但毕竟不是图像长宽!不要舍近求远了,要讲究开发效率!但如果是作为技术研究,你应该自己去把长宽变为16进制到文件中去比对!
你的那种做法肯定不行。我要的不是IMAGE的长宽 而是想要jpg原始文件的长宽TO:blazingfire(烈焰) ( )
你的做法是让IMAGE适应原始jpg文件的大小 再通过image的长宽来读jpg图片的长宽, 虽然可以得出正确的结果,但做法有些搞笑 不可取
因为如果jpg比较大的话,刷屏厉害 而且用户不需要看到中间的那个过程 再说速度也会慢
顺便帮忙一下: 插图片到EXCEL中的VBA怎么写啊
JPEG:=TJPEGImage.Create;你是不是没加上面的语句?看来你太粗心了!
{ 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;