// Based on 6 Aug 2000 posts to borland.public.delphi.objectpascal // by Peter Klein procedure TForm1.Button1Click(Sender: TObject); VAR FileStream: TFileStream; InfoHeader: TBitmapInfoHeader; begin IF OpenDialog.Execute THEN BEGIN FileStream := TFileStream.Create(OpenDialog.FileName, fmOpenRead OR fmShareDenyNone); TRY FileStream.Seek(SizeOf(TBITMAPFILEHEADER), soFromBeginning); FileStream.Read(InfoHeader, SizeOf(InfoHeader)); ShowMessage('XPelsPerMeter=' + IntToStr(InfoHeader.biXPelsPerMeter) + ', YPelsPerMeter=' + IntToStr(InfoHeader.biYPelsPerMeter)) FINALLY FileStream.Free END END end; ========================================================================== From: "Earl F. Glynn" Subject: Re: dpi Date: 15 Dec 1999 00:00:00 GMT Message-ID: <839m2u$pdf15@forums.borland.com> X-Priority: 3 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600 Organization: Another Netscape Collabra Server User X-MSMail-Priority: Normal Newsgroups: borland.public.delphi.graphics "Wolfgang Kaeckenmeister" wrote in message news:385810E7.39BEA3D9@compuserce.com... > Joris Van Damme schrieb: > > Wolfgang Kaeckenmeister wrote: > > > How can I get the dpi of an BMP-Image? > But can you give me a hint, how I can get this structure. > Is there a function within Delphi or must I create one myself? Here's some code that shows you how to access fields in a bitmap's header record. BUT, I cannot find a Bitmap that has anything but 0s for both these values (biXPelsPerMeter and biYPelsPerMeter): PROCEDURE GetPelsPerMeter(CONST Bitmap: TBitmap; VAR xPelsPerMeter, yPelsPerMeter: INTEGER); VAR BitmapHeader: pBitmapInfo; BitmapImage : POINTER; HeaderSize : DWORD; ImageSize : DWORD; BEGIN GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize); GetMem(BitmapHeader, HeaderSize); GetMem(BitmapImage, ImageSize); TRY GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^); xPelsPerMeter := BitmapHeader^.bmiHeader.biXPelsPerMeter; yPelsPerMeter := BitmapHeader^.bmiHeader.biYPelsPerMeter; FINALLY FreeMem(BitmapHeader); FreeMem(BitmapImage) END END {GetPelsPerMeter}; procedure TForm1.Button1Click(Sender: TObject); VAR Bitmap : TBitmap; xPelsPerMeter: INTEGER; yPelsPerMeter: INTEGER; begin IF OpenPictureDialog.Execute THEN BEGIN Bitmap := TBitmap.Create; TRY Bitmap.LoadFromFile(OpenPictureDialog.Filename); GetPelsPerMeter (Bitmap, xPelsPerMeter, yPelsPerMeter); ShowMessage('xPelsPerMeter = ' + IntToStr(xPelsPerMeter) + ', ' + 'yPelsPerMeter = ' + IntToStr(yPelsPerMeter)) ; FINALLY Bitmap.Free END END end; Other fields in TBitmapInfo record: biSize: DWORD; biWidth: Longint; biHeight: Longint; biPlanes: Word; biBitCount: Word; biCompression: DWORD; biSizeImage: DWORD; biXPelsPerMeter: Longint; biYPelsPerMeter: Longint; biClrUsed: DWORD; biClrImportant: DWORD; Using similar code to above, the biWidth and biHeight values match those of Bitmap.Width and Bitmap.Height. -- efg Earl F. Glynn Overland Park, KS USA efg's Computer Lab: http://www.efg2.com/Lab ==========================================================================