お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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

"リソース内のJPEG読み出し"







☆説明
 リソースに保存したJPEGファイルを Image に読み出します。

☆準備
 1.JPEGファイルのリソースを作成します。
  (ソース中のコメント参照(^^;)
 2.Form1 の Image1 を貼り付けます。
 3.uses に jpeg を追加します。

☆補足
 ・Delphi3.1 でテスト。
 ・リソースにBitmapを使用すると実行形式のサイズが大きくなるので、
  JPEGを利用すればかなりサイズ的にメリットがありそうです。
 ・Bitmapに比べ画像表示が多少遅い。

[サンプルソース1・TResourceStream 使用]
----------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
var
  jpg:   TJPEGImage;
  bmp:   TBitmap;

  res:   TResourceStream;
begin
  jpg := TJPEGImage.Create;
  bmp := TBitmap.Create;

  // JPEGリソースの作成方法
  // 1."image.rc" をテキストで作成する
  //   内容:IMG RCDATA "xxxxx.jpg"
  // 2.リソースコンパイラでコンパイルする
  //   c:\...>BRC32 -r image.rc
  // 3.ソースコードにリソースの記述を追加
  //   {$R *.DMF}
  //   {$R image.res}  <-- 追加
  res := TResourceStream.Create( HInstance, 'IMG', RT_RCDATA );

  jpg.LoadFromStream( res );

  res.Free;

  bmp.Width  := jpg.Width;
  bmp.Height := jpg.Height;
  bmp.Assign(jpg);

  jpg.Free;

  Form1.ClientWidth  := bmp.Width;
  Form1.ClientHeight := bmp.Height;

  Image1.Width  := bmp.Width;
  Image1.Height := bmp.Height;
  Image1.Canvas.Draw( 0, 0, bmp );

  bmp.Free;
end;
----------------------------------------------------------------------

[サンプルソース2・WIN32 API 使用]
----------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
var
  jpg:   TJPEGImage;
  bmp:   TBitmap;

  mem:   TMemoryStream;

  hRes, hJpg:  THANDLE;
  pJpg:        LPSTR;
  size, size1: Integer;
begin
  jpg := TJPEGImage.Create;
  bmp := TBitmap.Create;

  hRes := FindResource( HInstance, 'IMG', RT_RCDATA );
  hJpg := LoadResource( HInstance, hRes );
  pJpg := LockResource( hJpg );

  mem := TMemoryStream.Create;

  size := SizeofResource( HInstance, hRes );
  mem.SetSize( size );

  size1 := mem.Write( pJpg^, size );
  mem.Seek( 0, soFromBeginning );   // 忘れないように(^^;
  jpg.LoadFromStream( mem );

  mem.Free;

// WIN32では不要   UnLockResource( hJpg );
// WIN32では不要   FreeResource( hJpg );

  bmp.Width  := jpg.Width;
  bmp.Height := jpg.Height;
  bmp.Assign(jpg);

  jpg.Free;

  Form1.ClientWidth  := bmp.Width;
  Form1.ClientHeight := bmp.Height;

  Image1.Width  := bmp.Width;
  Image1.Height := bmp.Height;
  Image1.Canvas.Draw( 0, 0, bmp );

  bmp.Free;
end;
----------------------------------------------------------------------

                              98/1/11(日) 06:40pm  LDM03756 佐藤 充男

Original document by 佐藤 充男   氏 ID:(LDM03756)


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

Copyright 1996-2002 Delphi Users' Forum