设了一个Image,如何才能知道图片的高度与宽度?因为一填充,照片就变形了????也就是说,怎么能让照片正常在Image中显示?
解决方案 »
- 我回来啦
- 高分请教高手excel 数据导出的问题
- **我的聊天程序那儿出错了?**有关Tserversocket和Tclientsocket的问题。
- 关于edit控件
- 只有50分了,帮帮忙吧。怎么实现图片的缩放和打印
- 各位大虾,这有一个硬盘问题,请指教
- 请问我的Delphi6。0的帮助是不是不全?为什么我查不到MessageDlg().IntToStr().Format()等常用函数?
- Delphi如何定义一个能被所有Form调用的函数或过程?
- 程序安装问题?
- 在没有窗口的单元文件中怎样创建adodataset
- 怎样得到数据库里面重复的记录,并把这些记录显示在DATAGRID同一行上?
- 小弟要用DEPHI作一个论坛程序(象联众那样),情各位高手给出编程思路!
设AutoSize := True;何为正常?图片的高和宽?什么图?如果是TPicture支持的图,那么像这样Image.Picture.Width或Image.Picture.Graphic.Width如果这问题也能困扰你很久,建议先补习补习英文
Stretch:=true;的效果
var bf :bitmapfileheader;
bi :bitmapinfoheader;
bmpstream :TMemoryStream;
begin
width:=0;
height:=0;
bmpstream :=TMemoryStream.Create;
if Assigned(img) then
begin
Image.Picture.Bitmap.SaveToStream(bmpstream);
bmpstream.Seek(0,14);
bmpstream.Read(bi,sizof(bitmapinfoheader));
width:=bi.biwidth;
height:=bi.biheight;
end;
end;
Stretch:=True;你们放张一寸的照片进去看看,再放张竖四寸的试试?
Stretch:=True;你们在一个图片框中放一张一寸的照片,再放一张横四寸的试试:(
Image1.AutoSize := True;
Image1.Stretch := False;
Image1.Picture.LoadFromFile('AFileName');
Image1.Width 和 Image1.Height 就是该图片的宽和高了。可以得到这个图片的高、宽。你如果有限制大小,又不想变形的话。把你用来显示的TImage(Image2)的AutoSize := False;
Stretch := True; 调整Width 和Height为你的限制值,注意一下调整方法:把Image2.Height置为你的限制值,调整
Image2.Width=Image1.Width * Image2.Height / Image1.Height;如果Image2.Width超过限制值,则将Image2.Width 置为限制值,调整
Image2.Height = Image1.Height * Image2.Width / Image1.Width ;
OK?
Image2.Height = Image1.Height * Image2.Width / Image1.Width ;这样是不能直接赋值的,类型不兼容。用Round或者Trunc先截成整数。
{ 获取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;