我正在使用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 $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; :
答案 0 :(得分:3)
在x循环之前,你没有正确设置RowPtr。它总是指向扫描线的第0个像素 尝试
Inc(RowPtr, OffX);
for x := 0 to width - 1...