设了一个Image,如何才能知道图片的高度与宽度?因为一填充,照片就变形了????也就是说,怎么能让照片正常在Image中显示?

解决方案 »

  1.   

    这和图像处理有关系?会变形?好像Stretch默认不为True?
    设AutoSize := True;何为正常?图片的高和宽?什么图?如果是TPicture支持的图,那么像这样Image.Picture.Width或Image.Picture.Graphic.Width如果这问题也能困扰你很久,建议先补习补习英文
      

  2.   

    不太可能知道图像(jpg或bmp文件)的大小,至少我认为。
      

  3.   

    晕倒,你们误会了我的意思:(如果照你们这样说的设置,万一图片比Image框大的话,就只能看到图片的一个角了:(
      

  4.   

    楼主Try一下
    Stretch:=true;的效果
      

  5.   

    procedure getimghw(img:TImage;var width,height:integer);
    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;
      

  6.   

    补充一下,上面的方法只对BMP。JPG我就不知道了
      

  7.   

    AutoSize:=True;
    Stretch:=True;你们放张一寸的照片进去看看,再放张竖四寸的试试?
      

  8.   

    AutoSize:=True;
    Stretch:=True;你们在一个图片框中放一张一寸的照片,再放一张横四寸的试试:(
      

  9.   

    有个很弱智的方法可以取得一幅图的高、宽:放一个TImage(Image1)下去, Image1.Visible := False;
    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?
      

  10.   

    如果Image2.Width调整后还超过限制值,则将Image2.Width 置为限制值,调整 
      Image2.Height =  Image1.Height * Image2.Width / Image1.Width ;这样是不能直接赋值的,类型不兼容。用Round或者Trunc先截成整数。
      

  11.   

    请参考:
    { 获取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;