扫描线使用(x 偏移)

Scanline usage (x offset)

我正在使用 ImageEnVect(或 TImage)绘制图像。 我使用 ScanLine,但通常我的图像不会逐行加载。

这是我的图像必须加载的方式。

procedure TJP2RenderPreview.put_region(size : _Ckdu_coords; buf : array of Integer; offX, offY : Integer);
var
  x, y          : Integer;
  width, height : Integer;
  buf_pos       : Integer;
  RowPtr        : PRGBTriple;
begin
  width:= size.__property_get_x;
  height:= size.__property_get_y;
  buf_pos:=0;

  for y := offY to offY + height - 1  do
  begin
    RowPtr:= formMain.imgPreview.Bitmap.ScanLine[y];
    for x := offX to offX + width - 1  do
    begin
//    RowPtr.rgbReserved      := (buf[buf_pos] div 00000);
      RowPtr.rgbtRed:= ((buf[buf_pos] mod 00000) div 000);
      RowPtr.rgbtGreen:= ((buf[buf_pos] mod 000) div 0);
      RowPtr.rgbtBlue:= (buf[buf_pos] mod 0);
      Inc(RowPtr);
      Inc(buf_pos);
    end;
  end;
  formMain.imgPreview.Refresh;
  formMain.imgPreview.Update;
end;

当第三部分到来时,我想在 OFFSETX 值上开始扫描线的 X 坐标。但它从 0 开始并结束。

我编辑了我的代码部分。所有颜色值(如(1239223))都部分地出现在数组中。 我给你偏移量和 width/height 值 :

第一次调用:OffX:0,OffY:0,宽度:100;身高:50;
第二个:OffX:0,OffY:50,宽度:100;身高:50;
第三:OffX:100,OffY:0,宽度:100;身高:50;
最后:OffX:100,OffY:50,宽度:100;身高:50;

绘制 X= 0 并且图像绘制结束,但 offsetX = 500; :

您没有在 x 循环之前正确设置 RowPtr。它总是指向扫描线的第 0 个像素。
尝试

 Inc(RowPtr, OffX);
 for x := 0 to width - 1...