掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TImageから拡張子pngで保存して読み込むとエラーになる (ID:149934)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
今回の現象は,多分,冷静に考えると分かった内容だと思います. でも一度疑問に思うと 「えっ ? 何故」 とはまってしまうんですよね. 私もよくあります. ところでご存じだとは思いますが, ついでに,他の方の参考になるかも知れないので・・・ ファイルの先頭にマジックナンバー と呼ばれる識別値があるファイルがあります この値を利用して画像ファイルの形式を判定できることがあります. 以下はビットマップと PNG 画像ファイルの例です. この他にも MIME タイプという値で判定する方法もあります. //============================================================================= // 画像ファイルが BMP 形式かを調べる // BMP の場合は先頭のの 2 バイトが BM という文字 //============================================================================= procedure TForm1.Button1Click(Sender: TObject); var LStream : TMemoryStream; LBiffer : array [0.19] of AnsiChar; begin LStream := TMemoryStream.Create; try LStream.LoadFromFile('503.bmp'); FillChar(LBiffer, SizeOf(LBiffer), #0); LStream.Position := 0; LStream.Read(LBiffer[0], 2); if SameText('BM', LBiffer) then begin ShowMessage(LBiffer); end; finally FreeAndNil(LStream); end; end; //============================================================================= // 画像ファイルが PNG 形式かを調べる // PNG の場合は 2 バイト目から PNG という文字になっている //============================================================================= procedure TForm1.Button2Click(Sender: TObject); var LStream : TMemoryStream; LBiffer : array [0..19] of AnsiChar; begin Memo1.Lines.Clear; LStream := TMemoryStream.Create; try LStream.LoadFromFile('503.png'); FillChar(LBiffer, SizeOf(LBiffer), #0); LStream.Position := 1; LStream.Read(LBiffer[0], 3); if SameText('PNG', LBiffer) then begin ShowMessage(LBiffer); end; finally FreeAndNil(LStream); end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.