关于图像算法和MOVE函数问题???????????????????????????? 
下面代码中image1控件已经载入了一幅图像 
var h,w:ingeter; pixels:array of byte; begin 
w:=image1.picture.width; h:=image1.picture.height; image1.picture.bitmap.pixelformat:=pf24bit; //重定义pixels的大小 setlength(pixels,w*h*3); 
for i:=0 to h-1 do 
move(image1.picture.bitmap.scanline[i]^,pixels[i*w*3],w*3); ------------------------------------- 上面的代码是将image1的全部像素拷贝到pixels数组中,但有几个不明白的问题, 1.setlength(pixels,w*h*3); 这句的作用是什么,为什么要重定义w*h*3大小的数组?????? 为什么要乘3 ???? 
2.关于MOVE函数的用法,move里面有三个参数,这三个参数是什么作用??????  
3,for i:=0 to h-1 do 
move(image1.picture.bitmap.scanline[i]^,pixels[i*w*3],w*3); 
上面代码中"image1.picture.bitmap.scanline[i]^" 请问scanline[i]^的作用是什么????是不是获得某一行的全部像素??????? 另外为什么一行的全部像素也能存入一个一维的只有一个byte数组中????? 另外第三个参数是什么意思w*3????

解决方案 »

  1.   

    1.setlength(pixels,w*h*3); 这句的作用是什么
      pixels:array of byte;声明的是动态数组,大小还没有确定2.关于MOVE函数的用法,move里面有三个参数,这三个参数是什么作用
      第一个参数:源数据;
      第2个参数:目的数据;
      第3个参数:数据大小;3,for i:=0 to h-1 do 
    move(image1.picture.bitmap.scanline[i]^,pixels[i*w*3],w*3); scanline[i]^的作用是获得某一行的全部像素。第三个参数是什么意思w*3????看来此控件处理的是24位bitmap,24位bitmap每个像素占3个字节,所以乘3