この道わが旅 夢幻工房入り口 -> お仕事 -> ただいま修行中…






このような、2色の画像を例に。




もちろんの事だが、ピクセル単位で表現すると、ファイルサイズが大きくなる



int charset, charset_temp, num;

charset_temp = '0';
num = 0;

while( ( charset = getchar() ) != EOF ){
if( charset < ' ' ) continue;

if( charset != charset_temp ){
charset_temp = charset;
putchar( num );
num = 0;
}
else if( num == 255 ){
putchar( num );
num = 0;
putchar( num );
}
num ++;
}


上記のソースのように、連続して現れる色の個数で表現するとファイルの大きさが小さくなるはず



これが、ランレングス符号化と呼ばれる圧縮方法

Cマガジン 98-9



volatile と宣言することによって、その変数を宣言したスレッド以外の別スレッドでも変数を安全に使用することができる。


volatile = 揮発性


という意味の volatile 変数は、変数が参照されるたびにメモリをアクセスしている
( 普通の変数は、一度レジスタに格納して、そのレジスタを参照している。 )


と、いうことで、別スレッド同士で使用しても内容が一致されている。


= いくら別スレッドだからといっても、そのスレッドでしか使用しない変数にまで、volatile を付けてしまうのは、無駄





即興で作成した、S3TCフォーマットでも、

218KBのBMPデータ( 200x279:32bit )が 27.4KB( 200x280:16bit / RGB565 )まで小さくなる


見比べ画像






あ、でも画像素人のボクには、わかりませんが…見る人が見たら、汚いといわれるんでしょうな。


作り方



  • 1.画像を 4x4Pixel に区分けしていく。( 便宜上、Texel と呼ぶ )


  • 2.その Texel 内部で使用されている、色から代表的な2色を選ぶ


  • 3.その2色と補間色2色で Texel を塗りなおす。




これで、代表2色と塗りなおした Texel のパレット、合計 64 bit で、16 pixel が表現できます。



んで、その 64 bit のフォーマットは…

4x4 Pixel = 1 Texel


0 1 2 3
4 5 6 7
8 91011
12131415

S3TC Format( *.dds : DXT1 )


代表色 1( 16bit ) 代表色 0( 16bit )
パレット 15( 2 bit ) パレット 14( 2 bit ) パレット 0( 2 bit )

と、なるようです。


ここから、まわりの Texel との関係や、Texel 内部の色が少なかったときなど、

いろいろな条件を組み合わせれば、もっと圧縮&美麗なものができるはず

Cマガジン 99-12










VisualC++6.0(以下 VC)ではデフォルトで、(実行ファイル名).HLPファイルをヘルプとして開こうとします。

しかし現在の主流はIE3.02以上で動作するHTML HELPに移行しています。


現にVisualC++.NETではデフォルトで(実行ファイル名).CHMファイルをヘルプとして開こうとします。


では、VCでも開けるようにしよう…と。

まず、MicrosoftHTMLHelpDownloads(英語)から htmlhelp.exe(HTML Help Workshop)をダウンロードしてください。
実行するとデフォルトなら「C:/Program Files/HTML Help Workshop」にインストールされるはずです。

これの使い方は別として…そのフォルダの中には include/htmlhelp.h と lib/htmlhelp.lib があります。
こいつを、VCの設定でリンクし、stdafx.hでインクルードしてやるようにします。



さて、そのあとですがそのままでは(実行ファイル名).HLPを呼びにいってしまいます。

で、それを変更する方法ですが…


CWinAppのpublicなメンバ変数に m_pszHelpFilePath があります。
こいつはヘルプで見てわかるとおりヘルプファイルへのパス名が入っているようです。
それをAppのInitInstanceで変更してやります。すると、デフォルトの(実行ファイル名).HLP以外のヘルプを呼びにいけます。

VCヘルプにも書かれていますが、必ずfree()してから変更してください。

〜以下抜粋〜

//First free the string allocated by MFC at CWinApp startup.
// まず CWinApp スタート時に MFC によって割り当ててられた文字列「(実行ファイル名).HLP」を解放しなさい。
//The string is allocated before InitInstance is called.
// InitInstance が呼ばれる前に、その文字列「(実行ファイル名).HLP」は、割り当てられています。

free((void*)m_pszHelpFilePath);

//Change the name of the .HLP file.
// .HLP ファイルの名前を変えましょう。
//The CWinApp destructor will free the memory.
// CWinApp のデストラクタは、そのメモリを解放するでしょう。

m_pszHelpFilePath=_tcsdup(_T( "d:\\somedir\\myhelp.hlp" ));


〜以上抜粋〜


ヘルプのサンプルは.HLPファイルになっていますが、ここを.CHMに書き換えてください。



さて、これで呼ぶファイルは変更されました。

ではもうひとつ、ClassWizardのメッセージにあるWinHelpをオーバーライトします。


// stdafx.h などでインクルードしておく
#include "htmlhelp.h"

void (アプリケーションApp)::WinHelp(DWORD dwData, UINT nCmd)
{
// アプリケーションを取得してヘルプファイルのパス名を取得
CWinApp *pApp = AfxGetApp();
CString strHelpPath = pApp->m_pszHelpFilePath;

HtmlHelp( m_hWnd, strHelpPath, HH_DISPLAY_TOPIC ,dwData );

// 基本クラスのメンバ関数は呼ばない
// CWinApp::WinHelp(dwData, nCmd);
}


などとすると呼べます

#ここは間違いがあるかもしれませんが…





この道わが旅 夢幻工房入り口 -> お仕事 -> ただいま修行中…