Interface 2013年04月号は画像技術特集

私自身、初となる雑誌への記事の投稿です。

 

 

ブログとは違って、記事を書く緊張感がまるで違いました。誤記は修正できないし、間違った事は言えないし。

と思いながら、慎重に記事を書いていたのですが、結局、誤記が~~~~。大変申し訳ありません。

私の分の誤記内容は、本記事の最後の方にまとめました。

もし、他にもお気づきの点がありましたら、このページにコメント頂けると助かります。

 

私が担当した内容は画像処理の基礎部分ですが、全般的に、これから工業用カメラを使う人の新人教育に丁度良さそうな内容だと思います。

この手の雑誌の場合、著者の会社の宣伝色が強くなりがちなのですが、今回はみなさん割と純粋に技術的な内容で書かれているので、参考になると思います。一部、宣伝色のある部分もあったり。(私の会社の...)

 

目次

第1章 知っておきたい!ディジタル画像

第2章 知っておきたい!画像処理

第3章 知っておきたい!画像変形

Appendix1 知っておきたい!画像合成

第4章 知っておきたい!ディスプレイ表示

Appendix2 知っておきたい!テレビ放送

第5章 知っておきたい!画像ファイル

第6章 知っておきたい!画像圧縮

Appendix3 知っておきたい!動画圧縮

第7章 知っておきたい!画像転送

第8章 知っておきたい!画像処理ライブラリ

Appendix4 知っておきたい!動画圧縮

(参考)

http://www.kumikomi.net/interface/contents/201304.php

 

誤記訂正

●P41 図6 誤)Q → 正)θ

●P48 図8 誤)ー → 正)+   下図、赤字部分

大変申し訳ありませんでした。

 

 

参考文献へ戻る

【C#】Graphicsオブジェクトの違いによる描画速度の比較

C#に限らず.NETのプログラムでは絵や線などを描画するにはGraphicsオブジェクトに対して描画を行いますが、Graphicsオブジェクトの作成方法で描画速度や挙動が異なります。

 

Graphicsオブジェクトを取得するメソッドにはCreateGraphics、FromHwnd、FromImageと、コントロールのPaintイベントのPaintEventArgsクラスのGraphicsプロパティから取得する方法があります。

 

まずは、結果から。

評価は画像を描画する速度と、線を描画する速度とで比較しました。

 

【描画速度の比較】

こちらはフォームのクライアント領域のサイズ、および描画するGraphicsオブジェクトを変えながら、サイズ1024×1024の画像を2枚、交互に表示した場合の結果です。

 

(評価プログラムのイメージ)

 

(描画速度)

 

上記結果はフレームレートなので、値が大きいほど描画速度が速くなります。

 

これを見ると、CreateGraphicsを使った場合は、描画する領域が小さい場合は速くなりますが、DoubleBufferedの時が比較的速い結果となりました。

 

DoubleBufferedとはフォームのDoubleBufferedプロパティをtrueに設定し、PaintイベントのPaintEventArgsクラスから取得したGraphicsプロパティに描画した場合です。

 

FromImageはフォームのクライアント領域と同じBitmapオブジェクトを作成して、そのBitmapをフォームのBackgroundImageに指定し、このBitmapからFromImageメソッドでGraphicsオブジェクトを取得した場合です。

 

【線の描画速度の比較】

こちらも同様にフォームのクライアント領域のサイズ、および描画するGraphicsオブジェクトを変えながら、フォームのクライアント領域に1画素おきの縦、横の線を描画した時の結果です。

 

(評価プログラムのイメージ)

 

(描画速度)

 

上記結果は描画が完了するまでの時間なので、値が小さいほど描画速度が速くなります。

こちらもDubleBufferedが圧倒的に速い結果となりました。

 

【考察】

結果からするとフォームのDoubleBufferedプロパティをtrueにしてPaintイベントのPaintEventArgsクラスから取得したGraphicsプロパティに描画するのがベストのようです。
ただし、Paintイベント内で描画してもBackgroundImageがnullでない場合は、描画速度が遅くなるので注意して下さい。

ちなみに、今回はフォームに描画しましたが、PictureBoxではDoubleBufferedプロパティがありません。

しかし、PictureBoxでも試してみた限り、PictureBoxではDoubleBufferedプロパティがtrueの時と同じ動作をしてくれるようです。

 

画像を描画する場合、DrawImageメソッドで描画したあとにフォームのRefreshメソッドが必要なFromImageを使った描画が遅くなりました。

 

線を描画する場合は、線を一本一本描画する様子が見えるか?見えないか?で差が出ています。

FromaImageとDoubleBufferedの場合は一旦、メモリに描画してからフォーム上に表示されるので、高速な結果となりました。

逆にCreateGraphicsなどを使った線の描画はちょっと遅すぎ...

 

ただ、Paintイベントで画像や線を描画するのは、ちょっと面倒くさいかと思います。

そんな時に、ダブルバッファを手動で行う手法を別途まとめました。↓

手動ダブルバッファによる高速描画

 

C#へ戻る

新しいOffice(Office2013)の無償アップグレードでのプロダクトキーの入手方法

Office2010の無償アップグレードの申し込んで新しいOffice(Office2013)がダウンロードできるようになりましたが、新しいOfficeのダウンロードページには

 

 

とか、

 

 

と書いてありますが、新しいOfficeのインストール自体は、特に問題なく出来たのですが、新しいOfficeのプロダクトキーの入手方法がWordやExcelを起動しても分からないし、どのように入手したらよいのか?さっぱり分からない。

 

プロダクトキーを入手しておかないと、最悪、再インストールができないのかな?と思い、調べてみたら、やっぱり同じ様に分からない人がいて、参考になるページがありました。

Office2013 無償アップグレード時の Office2013 のプロダクトキーの確認方法

http://answers.microsoft.com/ja-jp/office/forum/office_2013_release-office_install/office2013/9a044d83-8fe8-4593-9d72-e276683799b6

要約すると、

  • http://office.com/myaccount のページへ行く
  • アカウントオプションの部分の ディスクからのインストール をクリック

  • ディスクを持っている場合 をクリック

 

これで、プロダクトキーが表示されます。

 

ちなみに私は新しいOfficeをインストール後に、この操作を行ったのですが、インストール前にプロダクトキーを確認できるのか?は不明です。

 

実際には、ディスクを持っている場合以外にもディスクを購入ディスクに書き込むのどれをクリックしてもプロダクトキーは確認できるのですが、ディスクに書き込むでバックアップ用のDVDを作っておいた方が安心かも?

 

これ、めちゃくちゃ、分かりづらい...