终于登上来了,请教达人,看看我的程序
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,jpeg,zlib;type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Button2: TButton;
    Image2: TImage;
    Button3: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
   bmpstream:tmemorystream;
   deststream:array of tmemorystream;
   leftsize:integer;
  ypos:integer=0;
  xpos:integer=0;
 // image:Timage;
  //jpgstream:TJPEGImage;
  ss:tcanvas;
  jy:tmemorystream;implementation
procedure UnCompressBitmap(const CompressedStream: TFileStream; var Bmp: TBitmap);   var    SourceStream: TDecompressionStream;   DestStream: TMemoryStream;   Buffer: PChar;   count:integer;
   Begin    //从被压缩的图像流中读出原始图像的尺寸  //  CompressedStream.ReadBuffer(Count, SizeOf(Count));
  // form1.edit1.Text:=inttostr(count);
   //根据图像尺寸大小为将要读入的原始图像流分配内存块
   count:=  CompressedStream.Size;
   GetMem(Buffer,count);   DestStream := TMemoryStream.Create;   SourceStream := TDecompressionStream.Create(CompressedStream);   Try    //将被压缩的图像流解压缩,然后存入 Buffer内存块中    SourceStream.ReadBuffer(Buffer^, Count);   //将原始图像流保存至 DestStream流中   DestStream.WriteBuffer(Buffer^, Count);   DestStream.Position := 0;//复位流指针   //从 DestStream流中载入原始图像流    Bmp.LoadFromStream(DestStream);   finally   FreeMem(Buffer);    DestStream.Free;    end;    end;
procedure ScreenCap(LeftPos,TopPos,
RightPos,BottomPos:integer);
var
RectWidth,RectHeight:integer;
SourceDC,DestDC,Bhandle:integer;
Bitmap:TBitmap;
begin
RectWidth:=RightPos-LeftPos;
RectHeight:=BottomPos-TopPos;
SourceDC:=CreateDC('DISPLAY','','',nil);
DestDC:=CreateCompatibleDC(SourceDC);
Bhandle:=CreateCompatibleBitmap(SourceDC,
RectWidth,RectHeight);
SelectObject(DestDC,Bhandle);
BitBlt(DestDC,0,0,RectWidth,RectHeight,SourceDC,
LeftPos,TopPos,SRCCOPY);
Bitmap:=TBitmap.Create;
Bitmap.Handle:=BHandle;
BitMap.SaveToStream(BmpStream);
BmpStream.Position:=0;
LeftSize:=BmpStream.Size;
Bitmap.Free;
DeleteDC(DestDC);
ReleaseDC(Bhandle,SourceDC);
end;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
 var count:integer;
     DestStream:tmemorystream;
     sourcestream:TCompressionStream;
begin    screencap(xpos,ypos,screen.Width,screen.Height);
     bmpstream.SaveToFile('E:\Documents and Settings\shenhong\桌面\新建文件夹\source.dat');
     image1.Picture.Bitmap.LoadFromStream(bmpstream);
     Count:=bmpstream.Size;
     DestStream:=TMemoryStream.Create;
     SourceStream:=TCompressionStream.Create(cldefault, DestStream);
     try
         bmpStream.SaveToStream(SourceStream);
         SourceStream.Free;
         bmpstream.Clear;
          bmpstream.WriteBuffer(Count, SizeOf(Count));
         bmpstream.CopyFrom(DestStream, 0);
      //   jy.CopyFrom(DestStream, 0);
          finally
          deststream.SaveToFile('E:\Documents and Settings\shenhong\桌面\新建文件夹\yasuo.dat');
         DestStream.Free;
       end;
       //deststream.SaveToFile('E:\Documents and Settings\shenhong\桌面\新建文件夹\dest.dat);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
   //deststream:=tmemorystream.Create;
   bmpstream:=tmemorystream.Create;
   jy:=tmemorystream.Create;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
bmpstream.Destroy;
//deststream.destory;
end;procedure TForm1.Button2Click(Sender: TObject);
var    CompressedStream: TFileStream; 
Bmp: TBitmap; 
begin
Bmp := TBitmap.Create; 
//以文件流的只读方式打开自定义的压缩格式文件 
CompressedStream := TFileStream.Create('E:\Documents and Settings\shenhong\桌面\新建文件夹\yasuo.dat', fmOpenRead);
  //CompressedStream.Create();
  Try
//将被压缩的图像流进行解压缩
UnCompressBitmap(CompressedStream, Bmp);
//将原始图像流还原为指定的 BMP文件
Bmp.SaveToFile('E:\Documents and Settings\shenhong\桌面\新建文件夹\jieyasuo.dat' );
   image2.Picture.Bitmap:=bmp;
   image2.Refresh;
   finally
Bmp.Free;
CompressedStream.Free;
end;
end;
94K
本来是做的一个屏幕抓取,抓下来的大小是3M,转换为jpeg压缩之后是94K,用zlib压缩后是65K
所以打算用zlib,但是我解压缩之后发现用image显示的图象是黑色的图象,但是解压缩之后文件的大小和以前的一样,不知道是什么原因.有人帮忙吗?谢谢