Re: データ圧縮プログラムのソースについて ( No.1 ) |
- 名前:GPGA 日時:2008/04/17 17:35
正しいです。
>// 戻り値:圧縮後のサイズ -1 はエラー Dest に NULL を入れると圧縮データ格納に必要なサイズが返る
>int LZSS_Encode( void *Src, int SrcSize, void *Dest ) ;
この関数のことだと思いますが、
>Dest に NULL を入れると圧縮データ格納に必要なサイズが返る
というのは、「第三引数にNULLを入れると圧縮データ格納に必要なサイズが返る」ということです。
|
Re: データ圧縮プログラムのソースについて ( No.2 ) |
- 名前:プログラム1年目な人 日時:2008/04/17 17:35
すみません、よく見たら解けました。
うまい言い方が判りませんが
NULL っていうアドレスを引数が貰っていました。
失礼します。
|
Re: データ圧縮プログラムのソースについて ( No.3 ) |
- 名前:プログラム1年目な人 日時:2008/04/17 17:42
すみません更新せず、書き込んでました。
使い方についてもあやふやな面もあり一気にスッキリしました。ありがとうございます。
|
Re: データ圧縮プログラムのソースについて ( No.4 ) |
- 名前:プログラム1年目な人 日時:2008/04/18 15:56
厚かましくももう一つ質問です。
LzssEncode.cpp内,262行~267行目になります。
// 圧縮情報の開始を示す数値と同じだった場合は、2回連続で出力する
if( SrcPoint[SrcSizeCounter] == EncodeCode )
{
if( Dest != NULL )PressData[PressSizeCounter]
= SrcPoint[SrcSizeCounter] ;
PressSizeCounter ++ ;
}
ここなのですが何故に2回連続で出力するのでしょうか?
どうかよろしくお願いします。
|
Re: データ圧縮プログラムのソースについて ( No.5 ) |
- 名前:かたぱると 日時:2008/04/18 19:31
ソースも見ずに
「データ圧縮プログラムについてざっくり学ぶ。」
のページからの引用になりますが
▽引用開始▽
ところで、ランレングス圧縮の時は『同じ文字が2回続く』ことで圧縮
された情報かどうかを判別していましたが、LZSS圧縮ではどうやって
圧縮された情報かどうかを判別するのでしょうか?
これについては、一番登場回数が少ない文字を圧縮情報の識別子にして
しまうという方法があります。(LZSS正規のものはちょっと面倒なので・・・)
先程の
ABCDEFGABCDEFCDEFGH
でいうなら、H です。一回しか出てきません。
なので、
H が出てきたら、そのあとの1文字目を『何文字前からか?』の数値、
2文字目を『何文字同じか?』の数値と判断します。
で、H 自体だった場合は HH と2回続けます。ランレングス圧縮の
場合と逆です。(^^;
△引用終了△
の部分のロジックではないでしょうか。
|
Re: データ圧縮プログラムのソースについて ( No.6 ) |
- 名前:管理人 日時:2008/04/19 22:01
2回連続で出力する理由はかたぱるとさんの仰られている通りです。
|
Re: データ圧縮プログラムのソースについて ( No.7 ) |
- 名前:プログラム1年目な人 日時:2008/04/23 13:29
遅くなりましたが
かたぱるとさん、管理人さんありがとうございます。
何回か読んでみてようやく判りました。
何度も何度もすみませんがもう一つどうかお願いします。
圧縮かけるファイルに数値0が一度も入っていなかった場合、
LzssEncode.cpp内178行目の
// 一番カウンターの値が少ない数値を圧縮情報の開始を示す数値に任命
{
// 最初は仮に0番を開始を示す数値としておく
EncodeCode = 0 ;
MinNum = NumCounter[0] ;
for( i = 1 ; i < 256 ; i ++ )
{
// より出現数が低い数値が見つかったら更新
if( MinNum > NumCounter[i] )
{
MinNum = NumCounter[i] ;
EncodeCode = i ;
}
}
}
ファイルにない数値0が圧縮情報になりそうなのですが
これで問題ないのでしょうか?
よろしくお願いします。
|
Re: データ圧縮プログラムのソースについて ( No.8 ) |
- 名前:プログラム1年目な人 日時:2008/04/23 13:41
あ・・別に関係なかったですね。すみません。
|