你这坐标x、坐标y怎么算出来的?如果只是改变宽高变成新图,可以用TBitmap.Canvas.CopyRect方法。

解决方案 »

  1.   

    你从大图取点 区域能找到吗,如果是矩形,TBitmap.Canvas.CopyRect可以办到啊,直接把大图某个区域 放到生成的图片上
      

  2.   

    嗯,他用了trunc(坐标x),trunc(坐标y)这种运算,看来坐标是浮点数,估计是做了旋转。要快一些的话,就不能用pixels[],也不需要用scanline(实际上还是需要用一次),自己定义一个指向位图数据的指针,直接读。
    看你的代码,既然有了prgbtriplearray类型,估计trgbtriplearray、trgbtriple也有,那只需要再定义:
    type
      P24bitBitmapData = ^T24bitBitmapData;
      T24bitBitmapData = array[0..0] of trgbtriplearray;
    然后:
    var
      BH: integer;
      P: P24bitBitmapData;
    // ...
      BH := jg.Height - 1;
      P := jg.ScanLine[BH];
    // ...
    for o:=0 to 图像高度-1 do
      begin
        for i:=0 to 图像宽度-1 do
        begin
            r_jg[i] := P[trunc(坐标x),BH - trunc(坐标y)];
        end;
    // ...
      

  3.   

    Canvas.Pixels必然很慢,可以先转到内存Bitmap然后试用scanline速度会快