各位大虾好,我想用一个内存流去读取一个已有值的文件流中了部份内容,因为文件流中的那部份内容进行了ZLIB压缩,
但我create内存流的时候总是返回空值,读取后句柄还是空的请哪位大虾指教一下。
inS:TMemoryStream;
begin
Stream.Seek (position+4, 0);
Stream.Read (imginfo, sizeof(TWMImageInfo)+FOffset);
FX[index]:=ImgInfo.px;
FY[Index]:=ImgInfo.py;
lsDib.Width := imginfo.Width lsDib.Height := imginfo.Height;
num:=imginfo.Width * imgInfo.Height * 2; ins:=TMemoryStream.Create; //这里执行后结果为()空。无句柄
ins.CopyFrom(stream,num);//这里能读取,但ins还是为();
ins.Seek(0,0);
DBits := lsDib.PBits;
ins.Read (DBits^, num); // Stream.Read (DBits^, imginfo.Width * imgInfo.Height * 2); //FBytesPerPixels: 1(256) 2(16位) 4 8
原来的语句是上面这句。我现在想做的是把DBits的内容读到流中进行ZLIB解压,现在我的流变量用在TDecompressionStream.Create中好像就会越界,跟没初始化一样。请各位帮下忙,谢谢!
但我create内存流的时候总是返回空值,读取后句柄还是空的请哪位大虾指教一下。
inS:TMemoryStream;
begin
Stream.Seek (position+4, 0);
Stream.Read (imginfo, sizeof(TWMImageInfo)+FOffset);
FX[index]:=ImgInfo.px;
FY[Index]:=ImgInfo.py;
lsDib.Width := imginfo.Width lsDib.Height := imginfo.Height;
num:=imginfo.Width * imgInfo.Height * 2; ins:=TMemoryStream.Create; //这里执行后结果为()空。无句柄
ins.CopyFrom(stream,num);//这里能读取,但ins还是为();
ins.Seek(0,0);
DBits := lsDib.PBits;
ins.Read (DBits^, num); // Stream.Read (DBits^, imginfo.Width * imgInfo.Height * 2); //FBytesPerPixels: 1(256) 2(16位) 4 8
原来的语句是上面这句。我现在想做的是把DBits的内容读到流中进行ZLIB解压,现在我的流变量用在TDecompressionStream.Create中好像就会越界,跟没初始化一样。请各位帮下忙,谢谢!
它其实是建立内存空间,看到()都是正常的(它就是这么表示的)
真想知道它是怎么工作的,去研究它实现的源码吧至于越界问题,就读取长度超出了你的数据长度