Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi DrawGrid仅显示第一个图像_Delphi - Fatal编程技术网

Delphi DrawGrid仅显示第一个图像

Delphi DrawGrid仅显示第一个图像,delphi,Delphi,我想在TDrawGrid中显示图像列表。在下面的示例中,“我的DrawGrid”仅显示1个图像,它是第一个图像。其他两个图像不显示在网格中。网格的行数为3,列数为1 这段代码在位图的移位区域绘制jpeg,所以您无法看到它 在位图活动区域中定义矩形。可能的方式: R.Top := 0; R.Left := 0; R.Right := 73; R.Bottom := 73; Bmp.Canvas.StretchDraw(R, JImg); OffsetRect(R, Rec

我想在TDrawGrid中显示图像列表。在下面的示例中,“我的DrawGrid”仅显示1个图像,它是第一个图像。其他两个图像不显示在网格中。网格的行数为3,列数为1

这段代码在位图的移位区域绘制jpeg,所以您无法看到它

在位图活动区域中定义矩形。可能的方式:

  R.Top := 0;
  R.Left := 0;
  R.Right := 73;
  R.Bottom := 73;

  Bmp.Canvas.StretchDraw(R, JImg);
  OffsetRect(R, Rect.Left + 1, Rect.Top + 1);
  DrawGrid1.Canvas.StretchDraw(R, Bmp);
这段代码在位图的移位区域绘制jpeg,所以您无法看到它

在位图活动区域中定义矩形。可能的方式:

  R.Top := 0;
  R.Left := 0;
  R.Right := 73;
  R.Bottom := 73;

  Bmp.Canvas.StretchDraw(R, JImg);
  OffsetRect(R, Rect.Left + 1, Rect.Top + 1);
  DrawGrid1.Canvas.StretchDraw(R, Bmp);
您正在使用错误的TRect值将TJPEG图像绘制到TBitmap上。您使用的值是相对于栅格的,而不是相对于TBitmap的,因此第二个和后续图像是在TBitmap的边界之外绘制的

您需要使用类似以下内容:

程序DrawGrid1DrawCellSender:ToObject;ACol,ARow:整数; ARect:TRect;州:TGR州; 变量 Bmp:TBitmap; R:TRect; JImg:tjpeg图像; 开始 JImg:=TJPEGImage.Create; 尝试 JImg.LoadFromFileFormat'c:\tmp\photo%d.jpeg',[ARow+1]; Bmp:=TBitmap.Create; 尝试 Bmp.PixelFormat:=pf24位; 宽度:=73; 高度:=73; R:=Rect0,0,Bmp.Width,Bmp.Height; Bmp.Canvas.StretchDrawR,JImg; 右偏左,右上; DrawGrid1.Canvas.StretchDrawR,Bmp; 最后 Bmp.Free; 终止 最后 免费; 终止 终止 但是,实际上根本不需要TBitmap,因为您可以直接将TJPEG图像绘制到网格的画布上:

程序DrawGrid1DrawCellSender:ToObject;ACol,ARow:整数; ARect:TRect;州:TGR州; 变量 R:TRect; JImg:tjpeg图像; 开始 JImg:=TJPEGImage.Create; 尝试 JImg.LoadFromFileFormat'c:\tmp\photo%d.jpeg',[ARow+1]; R:=Rect0,0,73,73; 右偏左+1,右偏上+1; DrawGrid1.Canvas.StretchDrawR,JImg; 最后 免费; 终止 终止
也就是说,每次在屏幕上重新绘制网格时,此代码都会重新加载.jpeg文件。您应该一次性加载文件并缓存图像,例如在TImageList中。或者干脆不使用TDrawGrid。例如,您可以将一系列TImage控件放置在TScrollBox上,然后将.jpeg文件加载到TImage控件中,让它们为您处理绘图。

您正在使用错误的TRect值将TJPEG图像绘制到TBitmap上。您使用的值是相对于栅格的,而不是相对于TBitmap的,因此第二个和后续图像是在TBitmap的边界之外绘制的

您需要使用类似以下内容:

程序DrawGrid1DrawCellSender:ToObject;ACol,ARow:整数; ARect:TRect;州:TGR州; 变量 Bmp:TBitmap; R:TRect; JImg:tjpeg图像; 开始 JImg:=TJPEGImage.Create; 尝试 JImg.LoadFromFileFormat'c:\tmp\photo%d.jpeg',[ARow+1]; Bmp:=TBitmap.Create; 尝试 Bmp.PixelFormat:=pf24位; 宽度:=73; 高度:=73; R:=Rect0,0,Bmp.Width,Bmp.Height; Bmp.Canvas.StretchDrawR,JImg; 右偏左,右上; DrawGrid1.Canvas.StretchDrawR,Bmp; 最后 Bmp.Free; 终止 最后 免费; 终止 终止 但是,实际上根本不需要TBitmap,因为您可以直接将TJPEG图像绘制到网格的画布上:

程序DrawGrid1DrawCellSender:ToObject;ACol,ARow:整数; ARect:TRect;州:TGR州; 变量 R:TRect; JImg:tjpeg图像; 开始 JImg:=TJPEGImage.Create; 尝试 JImg.LoadFromFileFormat'c:\tmp\photo%d.jpeg',[ARow+1]; R:=Rect0,0,73,73; 右偏左+1,右偏上+1; DrawGrid1.Canvas.StretchDrawR,JImg; 最后 免费; 终止 终止
也就是说,每次在屏幕上重新绘制网格时,此代码都会重新加载.jpeg文件。您应该一次性加载文件并缓存图像,例如在TImageList中。或者干脆不使用TDrawGrid。例如,您可以将一系列TImage控件放置在TScrollBox上,然后将.jpeg文件加载到TImage控件中,让它们为您处理绘图。

我在行R上遇到一个错误:=Rect0,0,Bmp.Width,Bmp.Height;{缺少运算符或分号}我使用BMP的原因是调整Jpeg的大小。此外,我不能使用图像列表,因为我的图像是动态的,是由网络摄像头创建的。再次感谢您的回复。您可以将一系列TImage控件放置在TScrollBox上,然后将.jpeg文件加载到TImage控件中,让它们为您处理绘图。这是我最初尝试的,但没有成功。。再次感谢您的帮助。@Lou我遇到一个错误-您是否重命名了Rect参数,如我在示例中所示?Rect是一个函数,但在原始代码中也是一个参数名。避免名称冲突。我使用BMP的原因是调整Jpeg的大小-您所做的只是拉伸JPG
o创建BMP,然后按原样绘制BMP。因此,只需将JPG拉伸到网格上即可。同样的效果,更少的开销。我不能使用图像列表,因为我的图像是动态的-您可以在有新的JPG时更新图像列表。这是我最初尝试的,但没有成功-为什么?我在行R上得到一个错误:=Rect0,0,Bmp.Width,Bmp.Height;{缺少运算符或分号}我使用BMP的原因是调整Jpeg的大小。此外,我不能使用图像列表,因为我的图像是动态的,是由网络摄像头创建的。再次感谢您的回复。您可以将一系列TImage控件放置在TScrollBox上,然后将.jpeg文件加载到TImage控件中,让它们为您处理绘图。这是我最初尝试的,但没有成功。。再次感谢您的帮助。@Lou我遇到一个错误-您是否重命名了Rect参数,如我在示例中所示?Rect是一个函数,但在原始代码中也是一个参数名。避免名称冲突。我使用BMP的原因是调整Jpeg的大小-您所做的只是将JPG拉伸到BMP上,然后按原样绘制BMP。因此,只需将JPG拉伸到网格上即可。同样的效果,更少的开销。我不能使用图像列表,因为我的图像是动态的-您可以在有新的JPG时更新图像列表。这是我最初尝试的,但没有成功——为什么?
  R.Top := 0;
  R.Left := 0;
  R.Right := 73;
  R.Bottom := 73;

  Bmp.Canvas.StretchDraw(R, JImg);
  OffsetRect(R, Rect.Left + 1, Rect.Top + 1);
  DrawGrid1.Canvas.StretchDraw(R, Bmp);