我正在使用write方法直接编写pixels
array of array[(R, G, B)] of byte;
。
pixels
已正确分配,如下所示:setlength(pixels, 750000);
我的工作如下:
f := TFileStream.create(FileName, fmCreate);
written := f.write(pixels, 750000);
问题是write方法返回0,videlicet它没有从pixels
写一个字节。
通过一些测试,我发现它只复制了大约20000个字节,当然不超过30000个字节,而且当我给它写更多时,它不会......并且返回0。
我是Pascal的新手,但我无法找到解决这个令人不快的问题的方法。那么我做错了什么?
答案 0 :(得分:1)
stream.write的第一个参数是一个所谓的形式参数,如stream.write(const buf; size:integer)左右。
编译器获取传递给它的任何地址并将其提供给过程。因为你使用一个没有边框的数组用于第一级(数组的数组..),所以它是一个动态数组,所以它是一个指针。
如果将数组传递给它,实际上会传递存储指针的内存位置。解决方案:传递第一个元素,像素[0],它是数据的位置。