2013年10月

C++Builder XE3 で BMP/JPEG/PNG 画像を合成する

C++Builder は、様々なフォーマットの画像を扱うのも簡単だ。……が、まとまった情報が見つからなくて苦労したので、ここにまとめておく。動作確認は C++Builder XE3。

例として、JPEG 画像を背景画像として、その上に、BMP 画像と透過 PNG 画像を重ねる。合成結果を PNG 画像として保存する。

背景 JPEGBMP透過 PNG
TestBG Test1
※Web 用に PNG に変換してあるが、元は BMP
Test2


準備として、ビットマップ形式以外の画像ファイルを読み書きしたい場合は、対応するヘッダをインクルードしておく。

#include <Jpeg.hpp>
#include <PNGImage.hpp>

ヘッダをインクルードしてしまえば、読み込みに関しては、画像フォーマットを気にせずに読み込めるようになる。書き込みは、対応する画像形式を扱うクラスに任せる。コードは以下。

void __fastcall TFormTest01::Button1Click(TObject *Sender)
{
    unique_ptr<TImage>        aImageMerge(new TImage(this));
    unique_ptr<TImage>        aImageBG(new TImage(this));
    unique_ptr<TImage>        aImage1(new TImage(this));
    unique_ptr<TImage>        aImage2(new TImage(this));
    unique_ptr<TPngImage>    aPng(new TPngImage());

    // 画像ロード
    aImageBG->AutoSize = true;
    aImageBG->Picture->LoadFromFile(L"R:\\TestBG.jpg");    // JPEG
    aImage1->AutoSize = true;
    aImage1->Picture->LoadFromFile(L"R:\\Test1.bmp");    // BMP
    aImage2->AutoSize = true;
    aImage2->Picture->LoadFromFile(L"R:\\Test2.png");    // PNG

    // 合成画像のサイズを背景画像に合わせる
    aImageMerge->Width = aImageBG->Width;
    aImageMerge->Height = aImageBG->Height;

    // 合成
    aImageMerge->Canvas->Draw(0, 0, aImageBG->Picture->Graphic);
    aImageMerge->Canvas->Draw(100, 200, aImage1->Picture->Graphic);
    aImageMerge->Canvas->Draw(300, 200, aImage2->Picture->Graphic);

    // PNG 保存
    aPng->Assign(aImageMerge->Picture->Graphic);
    aPng->SaveToFile(L"R:\\Result.png");
}

Result結果は右の画像のようになる。

シンプルなコードだが、透過もきちんと自動処理されている。

ポイントは、TImage を使うこと(ここでは動的生成しているが、もちろんフォームに貼り付けても良い)。TImage のローダーは、画像形式に関わらず読み込める。TBitmap を使うと PNG を読み込めなかった。

古いバージョンの C++Builder/Delphi だと、PNG の読み込みには TPngImage で画像の読み込みを行わなければならなかったようだが、現在は、TImage を使えば良い。

逆に、書き込みは、明示的に TPngImage を使っている。

aImageBG->Picture->SaveToFile(L"R:\\Result.png");

のように拡張子で自動的に PNG に変換してくれるかなーと期待したが、そんなことは無かった。



Wi-Fi 内蔵 SD カード「FlashAir」を使ってみた

FlashAir8Gオープンソースカンファレンス(OSC)に行ったら、FlashAir(8GB)をもらえた。表面の絵柄は OSC 販促専用だと思う。

FlashAir とは、無線アクセス機能を内蔵した SD カード(SDHC カード)。

通常、デジカメで撮影した写真をパソコンに取り込むには、デジカメから SD カードを取り出して、パソコンのカードリーダーに挿さなければならない。SD カードスロットが無いスマホだとお手上げだ。

しかし FlashAir なら、デジカメに挿したままで、無線 LAN 経由でパソコンに写真を取り込める。Wi-Fi だからスマホやタブレットでもアクセスでき、写真を撮ったその場でみんなのスマホ/タブレットに共有することも可能。

なんとも夢の広がる SD カードである。

……が、実際に使ってみた感想としては、「う~ん、今ひとつ」というところ。

今回は、キヤノンのデジカメ PowerShot S90 で試してみた。S90 の SD カードとして FlashAir を使い、撮影した写真を Wi-Fi で転送する、という使い方だ。

FlashAirSSIDタブレット(Android)からのアクセスは簡単。

デジカメの電源を予め入れておき、タブレットに FlashAir アプリをインストールして起動。SSID の選択画面が現れる。

FlashAir が Wi-Fi のアクセスポイントになっており、flashair_ で始まる SSID を提供しているので、それを選択してパスワード(初期値は 12345678)を入れると FlashAir に接続できる。

FlashAirFiles接続すると、SD カード(FlashAir)内のファイルを閲覧できる。DCIM フォルダをタップすれば、撮影した写真の一覧が表示される。欲しい写真を選択してダウンロードすれば、タブレットの中に写真が転送される、という仕組みだ。

しかしなんとなく、FlashAir アプリの使い勝手が良くない気がする。写真をダウンロードした後に外部アプリで写真を見ることが出来るのだが、FlashAir アプリに戻ると、FlashAir との接続が切られている。他の写真を見ようと思うと、接続からやり直し。

そもそも、FlashAir は独自規格(専用 API)でアプリと通信する。独自規格ではなく、Windows 共有をサポートしてくれていれば、普段使っている ES ファイルエクスプローラでサクサク閲覧・転送できるのに……。

また、デジカメはしばらく操作しないと省エネのために電源が切れるが、そうすると当然、FlashAir から切断されてしまう。切断されないようにするには、デジカメの何かのボタンを一定間隔で押さなければならず、これが結構面倒くさい。

続いて、Wi-Fi を内蔵していないデスクトップ PC からのアクセス。

これをするには、FlashAir をステーションモードにする必要がある。やり方はここに載っている。

ブラウザ経由でコマンドを送ってもできるらしいが、今回は、一度デジカメから FlashAir を抜いて、PC のカードリーダーに挿し、直接、設定ファイルを書き換えた。

ここで問題が発生し、設定ファイルにアクセスしようとしても、アクセスが完了せず、カードリーダーのアクセスランプが付きっぱなしになった。PC 再起動で設定ファイルの書き換えが可能になったが……。

ともあれ、設定ファイルを書き換てステーションモードにすれば、PC からブラウザでアクセスできるようになった。

しかしである。ステーションモードだと、出先でみんなで写真を共有する最初の方法が使えなくなってしまう。このへんがイマイチ。

ステーションモードで起動して、自宅の Wi-Fi に繋げなかったら自動的にアクセスポイントモードに戻るくらいの配慮は欲しかった。

というわけで、ちっこい SD カードに機能が凝縮されてすごいシロモノなんだけど、実用まではあと一歩。

FlashAir 用のアプリの作り方はここで公開されているので、積極的にアプリを作っていけば、ある程度状況は改善されるかもしれない。




AQUOS PAD (SH-08E) が MVNO SIM(IIJmio) で動作

AquosPad_SH-08ENTT docomo 2013 夏モデルの AQUOS PAD(SH-08E)が、IIJmio の SIM で動作した。IIJ の動作確認済み端末に掲載されていなかったのでちょっと心配だったが(今は更新されて掲載されている)、無事に動いて一安心。

AQUOS PAD は白ロムで 45,000 円ほどだった。Nexus 7 (2013) が思いの外高い値段で売り出されたので(4 万円)、それならあと 5,000 円足して IGZO でも買ってみるか、という感じ。防水だし。

最初、SIM を挿しても認識されなくて、初期不良かと思ったらそんなことはなくて、SIM の向きが逆だった。なんとこの機種、SIM の切り欠きが「手前」に来る状態(金色が上面)で差し込む。切り欠きは奥のイメージなんだけど、もしかしてこういう機種って多いのかな?

残念ながら、テザリングは利用不可。テザリングしようとすると、LTE が切れてしまう。

今まで使っていた、通信機能無しの Nexus 7 (2012) と比べると、通信する分、バッテリーがかなり減る印象。FOMA ハイスピード(HSPA)圏内で 7 時間半放置したところ、バッテリーが 5% 減っていた(83%→78%、1 時間当たり 0.7%)。

セルスタンバイMVNO SIM だとセルスタンバイ問題でバッテリーが異常消費されるケースがあるが、圏外時間が 0 秒なので、セルスタンバイ問題は発生してないと見て良いだろう(てくろぐによれば、セルスタンバイ問題が発生すると通信できていても圏外表示となる)。

逆に、使用中のバッテリーの減りは Nexus 7 より少ないかもしれない(まだ使い始めたばかりなのでよく分からないが)。

バッテリー消費に関連しそうな主な設定は以下のようになっている。
  • 画面の明るさ
    • アウトドアビュー:OFF
    • 明るさを自動調整:ON
    • エコバックライトコントロール:ON
  • バックライト点灯時間:2 分
  • エコ技設定:標準
  • Wi-Fi:スリープ時自動 OFF
  • Bluetooth:OFF
  • NFC:OFF
  • 同期:Gmail、アプリデータ、連絡先のみ
この機種はタッチパネルに不具合があったようだが、ファームアップで改善された模様。ファームアップ後も操作が変になることはあるが……。

ファームアップは、IIJ の SIM を挿した状態で、Wi-Fi 経由で行った。docomo の一部機種では、MVNO SIM だとファームアップできない(docomo SIM を挿しておかなければならない)ことがあるようだが、SH-08E は大丈夫だった。

IIJmioスピードテスト_自宅_クーポンON自宅にて IIJmio のスピード測定を行った。結果は驚異の 28.62Mbps。

まさか MVNO SIM でこれだけの速度が出るとは……。

間違って Wi-Fi 接続にしてしまっているのかとアンテナピクトを 2 度見したが、ちゃんと LTE 接続だった。

何かの間違いかと再度測定しても 24Mbps 程度出ていたので、本当にこれくらいのスピードが出ているのだろう。

とはいえ、うちの電波状況が特別良いというだけのようで、出先で何回かスピード測定したら、2~5Mbps 程度のことが多かった。

RBB TODAY の測定では、速度が出るほどパケット通信量が多い印象。自宅での測定だと、1 回の測定で 10MB 程度もパケットを使ってしまった。500MB クーポンの身としてはつらい……。

IIJmioスピードテスト_自宅_クーポンOFFクーポン OFF にすると、0.39Mbps(399Kbps)。

公称の 200Kbps よりだいぶ速い。

格安 MVNO は数多くあるが、インフラは信頼感が第一と言うことで、IIJmio か OCN モバイル ONE(旧称 OCN モバイルエントリー d 980)のどちらかにしようと思っていた。

パケットプランとしては、1 日ごとに使用量がリセットされる OCN の方が良いなと思ったが、MVNO としての歴史の長さを考えて IIJmio にした。

IIJmio ウェルカムパック for BIC SIM にしたので、街中の Wi-Fi スポットも無料で利用できる。IIJ のプランはミニマムスタートプラン(月額 945 円)。

信頼性についてはしばらく使わないと実感できないが、ひとまず、予想外の高速性というサプライズがあって良かった。

ただ、IIJ で不満なのは、ユーザー登録時のパスワード文字数が 8 桁までしか登録できないこと。

大手サイトのチェックをした時にも書いたが、8 文字のパスワードは 15 時間で解読されてしまうとのことで、長い文字数を登録できるようにして欲しい。

なお、AQUOS PAD の初期設定では、スリープ時は Wi-Fi が自動的にオフとなる。仮に自宅の Wi-Fi 圏内だったとしても、バックグラウンド通信が LTE 経由となり、IIJmio のクーポンを消費してしまうので、大量の通信が行われないか注意が必要だ。


【更新情報】
  • 2013/11/02 スリープ時の Wi-Fi 自動 OFF について言及

KMZ→ITM ファイル変換サイトが CSV にも対応

GPS 軌跡データを ITM 形式(GPS Photo Tagger/ezTour 形式)で出力するウェブサイトの機能を拡張。V-990 の CSV も読み込めるようになった。

CANMORE ELECTRONICS(佳茂電子)製 GPS ロガー「GT-730FL-S」、HOLUX 製 GPS ロガー「M-241」、Victory Technology(COLUMBUS)製 GPS ロガー「V-990」などをお持ちの方は、軌跡データの整理やダイエットなどにどうぞ。


月別アーカイブ
記事検索
最新コメント
  • ライブドアブログ