« アプリケーション設定情報の在処 | トップページ | スケーリングしてみました その2 »

2015年3月 6日 (金)

スケーリングしてみました

デスクトップ画像のスケーリングの仕組みだけ入れてみました。

今回はクライアントマシン側でスケーリングする方法をとります。サーバ側でスケーリングしてもらうことも可能ですが当然サーバ側の負荷が上がりますし、とりあえずクライアント側でスケーリングする仕組みも入れておいて問題はないと思いますので。

パブリックモードでは通常のJPEGファイルのイメージが1枚1枚送られてくるので、クライアントではこれを紙芝居のようにせっせと描画しています。今は素のJPEGファイルをQtさんにそのまま(サイズも変えず)表示してもらっています。

具体的にはQImageというクラスがありまして、

QImage image;

image.loadFromData((const uchar *)buf, len, "JPEG");

という感じでメモリ上に受け取った長さlenバイトのJPEGファイルのイメージをQImageのデータに変換します。

これをウィンドウの再描画の時に使うのですが、スケーリングしたい場合は再描画する前に、このimageのデータをスケーリングしてしまえば、再描画の部分は変更しなくても良さそうです。

QtAssistantを起動しまして、QImageのドキュメントを調べると、scaled()というメンバ関数が使えそうです。
スケーリングの指定サイズと縦横比を保持するか否かと変換品質(速さ優先 or 画質優先)の3つのパラメータを指定すれば良さそうです。

デスクトップ画像なので縦横比は保持したほうが良さそうです。変換品質に関してはマシンパワーがあれば画質優先したいですが、ここは選択できてもよいかと思います。最後にサイズなのですが、スケーリングの倍率だけ指定するのが簡単でよいのですが、引数としてはサイズの指定が必要になります。

このサイズの指定にはQSizeというクラスのインスタンスを指定できるので、このQSizeについてQt Assistantで調べてみました。

QSize & operator *=(qreal factor)
const QSize operator *(const QSize &size, qreal factor)

というのがちゃんと定義してありますね。

size *= 0.5;

とか書くとsizeが0.5倍のサイズに変更できるんですね。これを使えば、この倍率(factor)だけ指定するようにすれば簡単で良さそうです。

ということで、これまで調べた情報を元に仕組みだけ入れて実験しました。

インタフェース的にはスライダーとかにするとウニョウニョと拡大・縮小できて面白いのですが、すぐ飽きるかもしれませんね。

0.5倍でテストしました。画質優先を指定しています。通常のサイズで見るとかなり画質が違いますね。

Ws000001

あまり小さくし過ぎると作業が困難になりますが、サーバの状態を監視するくらいなら問題ないでしょうね。

« アプリケーション設定情報の在処 | トップページ | スケーリングしてみました その2 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: スケーリングしてみました:

« アプリケーション設定情報の在処 | トップページ | スケーリングしてみました その2 »