画像の表示(Ming/C++)

Ming(C++版)を使用して画像を表示するFlashコンテンツを作成してみる.
サンプル
サンプルのビルド

サンプル

画像を表示するだけのサンプルを以下に示す.

#include <stdio.h>
#include <errno.h>
#include <math.h>
#include <mingpp.h>

#define IMAGE_FILE "./MyImage.png"
#define X_MARGIN 20
#define Y_MARGIN 20

int main()
{
  // 画像の作成と読み込み
  SWFBitmap *image = new SWFBitmap(IMAGE_FILE);

  // SWFMovieサイズは画像の一回り大きいものにする
  int movie_size_x = image->getWidth() + X_MARGIN * 2;
  int movie_size_y = image->getHeight() + Y_MARGIN * 2;

  // とにかくSWFMovieがベース.
  SWFMovie *movie = new SWFMovie();
  // サイズ指定.
  movie->setDimension(movie_size_x, movie_size_y);
  // 背景色指定.
  movie->setBackground(0x00, 0xff, 0xff);
  // 動画のレート(fps)を指定.
  movie->setRate(0);

  // 画像をSWFMovieに置く.
  SWFDisplayItem *item = movie->add(image);
  // 置いた画像の位置を移動(XYセンタリング).
  item->moveTo(X_MARGIN, Y_MARGIN);

  // 作成した動画をswfとして出力.
  movie->save("sample03.swf");

  return 0;
}
今回のサンプルは,画像の一回り大きいSWFMovieに,画像をのせて表示するものである. ので,まず,画像を読み込む.
  // 画像の作成と読み込み
  SWFBitmap *image = new SWFBitmap(IMAGE_FILE);
画像は
SWFBitmap#SWFBitmap(const char *filename, const char *alpha=NULL)
にて作成する. 引数は,画像ファイルへのパスである. ファイルのサフィックスに応じてコンバートされ,Flashコンテンツ用のフォーマットに変換されるようだ. 現在許されるサフィックスは以下.
.dbl
.gif
.png
.jpg
上記以外のサフィックスだと例外が投げられる. 画像オブジェクトからは,読み込んだ画像のサイズを取得できる.
int getWidth()
int getHeight()
サンプルでは生成した画像のサイズから,SWFMovieのサイズを算出している.
  // SWFMovieサイズは画像の一回り大きいものにする
  int movie_size_x = image->getWidth() + X_MARGIN * 2;
  int movie_size_y = image->getHeight() + Y_MARGIN * 2;

  // とにかくSWFMovieがベース.
  SWFMovie *movie = new SWFMovie();
  // サイズ指定.
  movie->setDimension(movie_size_x, movie_size_y);
  // 背景色指定.
  movie->setBackground(0x00, 0xff, 0xff);
  // 動画のレート(fps)を指定.
  movie->setRate(0);
あとは,SWFMovieに画像を置いて,画像の位置を指定する.
  // 画像をSWFMovieに置く.
  SWFDisplayItem *item = movie->add(image);
  // 置いた画像の位置を移動(XYセンタリング).
  item->moveTo(X_MARGIN, Y_MARGIN);
このように,SWFMovie#add(SWFBlock *character)で取得できる,SWFDisplayItemオブジェクトのメソッド
moveTo(float x, float y)
にて,SWFMovieにaddしたオブジェクトの位置を指定できる. 最後にswfファイルを出力する.
  // 作成した動画をswfとして出力.
  movie->save("sample03.swf");
以上で,画像を表示するswfファイルが作成できる.

サンプルのビルド

定数IMAGE_FILEの値には,fdbファイルへの絶対パスを設定する. Makefileは以下.

CXXFLAGS=-I ${MING_HOME}/include -L ${MING_HOME}/lib -l ming -g

all: sample03.swf

sample03.swf: sample03
	./sample03

sample03: sample03.o
	g++ $(CXXFLAGS) $? -o $@

clean:
	rm *.o *.swf

depend:
	makedepend *.h *.cpp
# DO NOT DELETE

This article was written by Fujiko