お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"PNG イメージの幅と高さを取得"



みなさん、こんにちは。パンタグラフ(fumika)です。

JPEG、GIF ファイルから、内容を伸張せずに幅と高さを読み込む
サンプルが上がっていますが、その PNG バージョンを作ってみました。
幅・高さが正しく取得できたときは True を返します。
一部バイトオーダーの変換にアセンブラを用いています(^^;)




const PNG_SIGNATURE = #137#80#78#71#13#10#26#10;

function Bswap(Src: Integer): Integer; assembler;
asm
  bswap eax
end;

function GetPngSize(const FileName: string;
                    var Width, Height: LongWord): Boolean;
var
  F: TFileStream;
  PNG: array[0..8] of Char;
  ChunkType: array[0..3] of Char;
  W, H: Longint;
begin
  Result := False;
  Width  := 0;
  Height := 0;
  F := TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite);
  try
    F.Read(PNG, 8);
    if PNG = PNG_SIGNATURE then begin
      F.Seek(4, soFromCurrent);
      F.Read(ChunkType, 4);
      if ChunkType = 'IHDR' then begin
        F.Read(W, 4);
        F.Read(H, 4);
        Width  := Bswap(W);
        Height := Bswap(H);
        Result := True;
      end;
    end;
  finally
    F.Free;
  end;
end;

平成12年10月29日(日)  パンタグラフ(fumika)
              pantograph@nifty.com
  ☆ミ  http://homepage1.nifty.com/cosmic/
 


- FDELPHI  MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 00/10/29 -

Original document by fumika    氏 ID:(YRK00111)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum