- PR -

.NET標準Frameworkで圧縮/解凍が可能なクラスについて

1
投稿者投稿内容
トーマス
会議室デビュー日: 2004/07/04
投稿数: 14
投稿日時: 2004-07-08 00:57
皆様、こんばんわ。

私は今、.NET標準Frameworkで圧縮/解凍が可能なクラスを探しております。
どなたかサンプルなど載ったサイトをご存じないでしょうか?
ご教授願いたいと思っております。

どうぞ宜しくお願い申し上げます。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-07-08 08:55
最近どなたかが、標準の.net frameworkには圧縮/伸張に関係するクラスはないと、かかれていたような気が...。デジャブかな?

まあそれはおいといて、標準外であれば、以下のようなものが引っかかりました。
http://www.xceedsoft.com/products/ZipNet/index.htm
http://www.agtech.co.jp/products/nsoftware/ipworkszip/net.html

# 追記
過去の投稿から、こんなのが引っかかりました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11407&forum=7

[ メッセージ編集済み 編集者: かずくん 編集日時 2004-07-08 08:57 ]
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2004-07-08 09:31
http://msdn.microsoft.com/msdnmag/issues/03/06/ZipCompression/
あみゅせる
常連さん
会議室デビュー日: 2004/07/08
投稿数: 33
お住まい・勤務地: 神奈川県
投稿日時: 2004-07-08 11:54
おもいつきで検証などしてませんが、
標準にこだわるのならば、
データストリームをBMPにしてしまって、
可逆圧縮の画像(PNGとか)にするなんて
どうでしょう。

コーデックは標準でも、
圧縮側/伸張側ともに専用インターフェースが
必要になってしまいますね。



トーマス
会議室デビュー日: 2004/07/04
投稿数: 14
投稿日時: 2004-07-08 22:00
皆様どうもありがとうございます。

ところであみゅせる様に質問です。
どうゆう事なのでしょうか?
詳しくお聞かせ願えないでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-09 07:56
引用:

あみゅせるさんの書き込み (2004-07-08 11:54) より:

データストリームをBMPにしてしまって、
可逆圧縮の画像(PNGとか)にするなんて
どうでしょう。


 面白いですね。ビットマップヘッダを付けてバイナリ出力、それをPNGに変換して、PNGとして圧縮。。。どんな絵になるんだろう?
あみゅせる
常連さん
会議室デビュー日: 2004/07/08
投稿数: 33
お住まい・勤務地: 神奈川県
投稿日時: 2004-07-09 11:57
ちょっとやってみました。
ざっとこしらえたのでひどいコードです
参考程度にお願いします。

オリジナル Win32k.sys 1,720,368
LZH Win32k.sys 1,085,020
これ Win32k.sys 1,259,967

絵的にはカラフルなノイズといったところです(笑
アングラっぽい?

コード:
        private void Compress(string inFile,string outFile)
        {
            FileStream fs=new FileStream(inFile ,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
            BinaryReader br=new BinaryReader(fs);
            int length=(int)(fs.Length+4);
            int pixels=(int)(length+2)/3;
            int Width=((int)((System.Math.Sqrt(pixels))+8)/8)*8;
            Bitmap target=new Bitmap(Width,Width,PixelFormat.Format24bppRgb);
            byte[] content=br.ReadBytes((int)fs.Length);
            br.Close();
            byte[] buf = new byte[length];
            buf[0]=(byte)((length>>0)&0xff);
            buf[1]=(byte)((length>>8)&0xff);
            buf[2]=(byte)((length>>16)&0xff);
            buf[3]=(byte)((length>>24)&0xff);
            for(int ptr=4;ptr<length;ptr++) buf[ptr]=content[ptr-4];
            BitmapData dat = target.LockBits(new Rectangle(0,0,Width,Width),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);
            Marshal.Copy(buf,0,dat.Scan0,length);
            target.UnlockBits(dat);
            target.Save(outFile,ImageFormat.Png);

        }
        private void DeCompress(string inFile,string outFile)
        {
            Image target=Image.FromFile(inFile);
            BitmapData dat = ((Bitmap)target).LockBits(new Rectangle(0,0,target.Width,target.Height),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);
            int [] lgs=new int[1];
            Marshal.Copy(dat.Scan0,lgs,0,1);
            byte[] buf=new byte[lgs[0]];
            Marshal.Copy(dat.Scan0,buf,0,lgs[0]);
            FileStream fs=new FileStream(outFile ,FileMode.OpenOrCreate,FileAccess.Write,FileShare.ReadWrite);
            BinaryWriter bw=new BinaryWriter(fs);
            bw.Write(buf,4,lgs[0]-4);
            bw.Close();
        }


_________________
1

スキルアップ/キャリアアップ(JOB@IT)