我使用动态数组来存储密钥、像素和加密像素。程序在第一次加密时运行流畅,但在更改图片时,程序崩溃“Project2.exe 模块中地址 00401BF1 处的访问冲突”。写入地址 00000001'。
我认为这是因为我将 setLength
过程放在加载图片按钮中。这是我加载图片后使用的代码。注意:还有真彩色图片的代码,我需要将长度设置为 setLength(image1.picture.height * image1.picture.width * 3)
的 3 倍。但这是加载图片按钮中灰度图片的简单一种
SetLength(ppixels, image1.picture.height * image1.picture.width);
k := 0;
for i := 0 to Image1.picture.height-1 do
begin
PC := Image1.Picture.Bitmap.ScanLine[i];
for j := 0 to Image1.picture.width-1 do
begin
ppixels[k] := PC[j];
k := k + 1;
end;
end;
我试图用
操纵它if(Length(ppixels)<0) then setLength(ppixels, image1.picture.height * image1.picture.width);
这仅适用于像素较少的图片,这不是我正在寻找的解决方案。还尝试将长度设置为非常大,例如 setLength(ppixels,100000000);
,但它给了我错误“内存不足”。也尝试过 setLength(ppixels,0)
、ppixels := nil
和 Finalize(ppixels)
,但这并没有解决问题并且仍然给出错误。
帮我解决这个问题,大师。非常感谢~
答案 0 :(得分:1)
我不知道如何动态设置长度,我目前最好的解决方案是让它有很大的静态尺寸,即 75 百万。所以程序只能加密小于 75m 像素的图片(彩色图片为 5000 x 5000 像素)。请添加任何建议或解决方案的答案,谢谢!