Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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
Image 图像相交_Image_Delphi_Delphi 7_Intersect - Fatal编程技术网

Image 图像相交

Image 图像相交,image,delphi,delphi-7,intersect,Image,Delphi,Delphi 7,Intersect,我如何知道我的两个图像何时相交?如果我没弄错的话 function IsIntersertButNotContained(const R1, R2: TRect): Boolean; var R: TRect; begin // R1 and R2 intersect Result:= IntersectRect(R, R1, R2) // R1 is not contained within R2 and not EqualRect(R, R1) // R2 is n

我如何知道我的两个图像何时相交?

如果我没弄错的话

function IsIntersertButNotContained(const R1, R2: TRect): Boolean;
var
  R: TRect;

begin
// R1 and R2 intersect
  Result:= IntersectRect(R, R1, R2)
//   R1 is not contained within R2
    and not EqualRect(R, R1)
//   R2 is not contained within R1
    and not EqualRect(R, R2);
end;
如果我没弄错的话

function IsIntersertButNotContained(const R1, R2: TRect): Boolean;
var
  R: TRect;

begin
// R1 and R2 intersect
  Result:= IntersectRect(R, R1, R2)
//   R1 is not contained within R2
    and not EqualRect(R, R1)
//   R2 is not contained within R1
    and not EqualRect(R, R2);
end;

下面的代码执行完整检查

下一步:位图通常不是矩形。
假设将颜色指定为“透明”,例如黑色(RGB(0,0,0))
您可以看到两个相互重叠的位图是否在相同的x/y坐标下具有非黑色像素

下面的代码演示。
我还没有测试代码,所以可能存在一些小问题

//此函数首先测试边界矩形,然后进入像素
//在重叠矩形内。
函数DoBitmapsOverlap(Bitmap1,Bitmap2:TBitmap;
位图2偏移:TPoint;TPColor:TColor):布尔值;
变量
Rect1,Rect2:TRect;
重叠矩形:TRect;
x1,y1:整数;
c1,c2:t颜色;
开始
结果:=假;
Rect1:=Rect(0,0,位图1.Width,位图1.Height);
使用Bitmap2Offset do Rect2:=Rect(x,y,x+Bitmap2.宽度,y+Bitmap2.高度);
如果不是(IntersectRect(OverlapRect,Rect1,Rect2)),则退出;
对于x1:=OverlapRect。从左到OverlapRect。从右开始
对于y1:=OverlapRect.Top到OverlapRect.Bottom不开始
c1:=位图1.Canvas.Pixels[x1,y1];
c2:=Bitmap1.Canvas.Pixels[x1-Bitmap2Offset.x,y1-Bitmap2Offset.y];
结果:=(c1 TPColor)和(c2 TPColor);
如果有结果则退出;
终止{对于y1}
终止{for x1}
终止

以下代码执行完整检查

下一步:位图通常不是矩形。
假设将颜色指定为“透明”,例如黑色(RGB(0,0,0))
您可以看到两个相互重叠的位图是否在相同的x/y坐标下具有非黑色像素

下面的代码演示。
我还没有测试代码,所以可能存在一些小问题

//此函数首先测试边界矩形,然后进入像素
//在重叠矩形内。
函数DoBitmapsOverlap(Bitmap1,Bitmap2:TBitmap;
位图2偏移:TPoint;TPColor:TColor):布尔值;
变量
Rect1,Rect2:TRect;
重叠矩形:TRect;
x1,y1:整数;
c1,c2:t颜色;
开始
结果:=假;
Rect1:=Rect(0,0,位图1.Width,位图1.Height);
使用Bitmap2Offset do Rect2:=Rect(x,y,x+Bitmap2.宽度,y+Bitmap2.高度);
如果不是(IntersectRect(OverlapRect,Rect1,Rect2)),则退出;
对于x1:=OverlapRect。从左到OverlapRect。从右开始
对于y1:=OverlapRect.Top到OverlapRect.Bottom不开始
c1:=位图1.Canvas.Pixels[x1,y1];
c2:=Bitmap1.Canvas.Pixels[x1-Bitmap2Offset.x,y1-Bitmap2Offset.y];
结果:=(c1 TPColor)和(c2 TPColor);
如果有结果则退出;
终止{对于y1}
终止{for x1}
终止

您需要添加更多信息才能得到一个好答案。我们正在测试的图像中是否存在交叉点?请提供更多关于您所谈论内容的详细信息。请在您的问题上标记您正在使用的语言和库。“Delphi7”是确定语言所需的全部知识。事实上,这个术语所包含的信息远不止“C”或“Visual Basic”。@Uwe-看看“修订版”,当忍者留下评论时,只有一个
设计
标签。你需要添加更多的信息才能得到一个好的答案。我们正在测试的图像中是否存在交叉点?请提供更多关于您所谈论内容的详细信息。请在您的问题上标记您正在使用的语言和库。“Delphi7”是确定语言所需的全部知识。事实上,这个术语包含的信息远远不止“C”或“Visual Basic”。@Uwe-看看“修订版”,当忍者留下评论时,只有一个
design
标签。@Johan和@David:我解释了为什么我在code@Johan代码本身就说明了问题。没有评论,答案更好。我做到了+1可能我错了,但我们真的需要工会会员吗?如果一个矩形包含在另一个矩形中,IntersectRect应该返回内部矩形,对EqualRect的检查应该足够了。@Uwe-谢谢,接受。只要习惯使用UnionRect就行了。@Johan和@David:我解释了为什么我要用UnionRect编辑答案code@Johan代码本身就说明了问题。没有评论,答案更好。我做到了+1可能我错了,但我们真的需要工会会员吗?如果一个矩形包含在另一个矩形中,IntersectRect应该返回内部矩形,对EqualRect的检查应该足够了。@Uwe-谢谢,接受。只要习惯使用UnionRect即可。