扫描线使用(x偏移)

时间:2015-02-04 14:57:47

标签: delphi

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

以下是我的图片必须加载的方式。 enter image description here

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 $1000000);
      RowPtr.rgbtRed:= ((buf[buf_pos] mod $1000000) div $10000);
      RowPtr.rgbtGreen:= ((buf[buf_pos] mod $10000) div $100);
      RowPtr.rgbtBlue:= (buf[buf_pos] mod $100);
      Inc(RowPtr);
      Inc(buf_pos);
    end;
  end;
  formMain.imgPreview.Refresh;
  formMain.imgPreview.Update;
end;

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

我编辑了我的代码部分。像(1239223)这样的所有颜色值都是按部分排列的。 我给你偏移和宽度/高度值:

First call : OffX : 0, OffY: 0, Width: 100; Height: 50;
Second : OffX : 0, OffY: 50, Width: 100; Height: 50; 
Third : OffX : 100, OffY: 0, Width: 100; Height: 50;
Last :  OffX : 100, OffY: 50, Width: 100; Height: 50;

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

enter image description here

1 个答案:

答案 0 :(得分:3)

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

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