お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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

"様々なJPEGファイルの読み込み方法"



{Delphi3.xのTJPEGで、標準のJPEGはもちろん、Mac BinaryのあるJPEG
 や、リコーのデジカメが当初(DC-2シリーズまで)採用していたJ6I
 ファイル、SONYのサイバーショットのPMPファイルが表示できます。

 uses にJPEGを追加して、フォームに Button1、OpenDialog1、Image1
 をセットしてください。}



procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TMemoryStream;
  Jpg: TJPEGImage;
  Hd: Integer;
begin
  if OpenDialog1.Execute then
  begin
    Hd := Header(OpenDialog1.FileName);
    if Hd < 0 then Exit;//JFIFではないので読み込めないため
    try
      Stream := TMemoryStream.Create;
      Stream.LoadFromFile(OpenDialog1.FileName);
      Stream.Seek(Hd, soFromBeginning);
      try
        Jpg := TJPEGImage.Create;
        Jpg.LoadFromStream(Stream);
        Image1.Picture.Bitmap.Assign(Jpg)
      finally
        Jpg.Free;
      end;
    finally
      Stream.Free;
    end;
  end;
end;

function TForm1.Header(FileName: string): Integer;
var
  F: File;
  SOI: Word;
  I: Integer;
begin
  Result := -1;
  AssignFile(F, FileName);
  FileMode := 0;
  {$I-}
  Reset(F, 1);
  try
    for I := 0 to 256 do
    begin
      Seek(F, I);
      BlockRead(F, SOI, 2);
      if Swap(SOI) = $FFD8 then
      begin
        Result := I;
        Break;
      end;
    end;
  finally
    CloseFile(F);
    {$I+}
  end;
end;


 =======================================
 クラシックカメラと拙作フリーソフトのホームページ『奇珍館』
   URL:http://member.nifty.ne.jp/~yun/
     1998.03.09 更新! 新作:MbCut公開
 =======================================

Original document by YUN          氏 ID:(JCC01421)


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

Copyright 1996-2002 Delphi Users' Forum