C#并非所有的矩形都是在高度约为70k px的图像中绘制的

C#并非所有的矩形都是在高度约为70k px的图像中绘制的,c#,image,list,draw,drawrectangle,C#,Image,List,Draw,Drawrectangle,所以我有大约160张2048px x 512px大小的图片。图像是灰色的,我检查白色区域,区域周围的矩形安全地保存在列表中。我现在想把图像缝合在一起,然后画矩形,我更新每个矩形的y位置,这样我就可以在正确的位置画它们 缝合和更新y位置效果良好。缝合的图像约为2048px 80kpx。 我检测到11个白色区域,但只绘制了3个矩形,即使在调试时,所有11个都应该绘制 前3个矩形位于前30k y轴px,其他矩形从45k px开始。当我改变代码,从图60开始时,前3个矩形当然不会被画出来,但其他8个是被

所以我有大约160张2048px x 512px大小的图片。图像是灰色的,我检查白色区域,区域周围的矩形安全地保存在列表中。我现在想把图像缝合在一起,然后画矩形,我更新每个矩形的y位置,这样我就可以在正确的位置画它们

缝合和更新y位置效果良好。缝合的图像约为2048px 80kpx。 我检测到11个白色区域,但只绘制了3个矩形,即使在调试时,所有11个都应该绘制

前3个矩形位于前30k y轴px,其他矩形从45k px开始。当我改变代码,从图60开始时,前3个矩形当然不会被画出来,但其他8个是被画出来的

你们有谁知道如何解决这个问题吗

public void GenerateImageMap()
    {

        StichtedImageTemp = new Image<Bgr, byte>(ImgWidth, ImgHeight * (GrayImageMap.Count));
        for (int i = 0; i < GrayImageMap.Count; i++)
        {
            StichtedImageTemp.ROI = new System.Drawing.Rectangle(0, i * ImgHeight, ImgWidth, ImgHeight);
            GrayImageMap[i].Convert<Bgr,byte>().CopyTo(StichtedImageTemp);
            CvInvoke.cvResetImageROI(StichtedImageTemp);
        }

        StichtedImageTemp.Save("GrayImageMap.png");
    }

public void GenerateDefectMap(List<Rectangle> RectangleItems) {
        GenerateImageMap();
        foreach (var item in RectangleItems)
        {
            StichtedImageTemp.Draw(item.GetRectangle, new Bgr(Color.Aquamarine), 3);
        }
        StichtedImageTemp.Save("GrayDefectMap.png");
    }
public void GenerateImageMap()
{
StichtedImageTemp=新图像(ImgWidth,ImgHeight*(graymagemap.Count));
对于(int i=0;i
您没有提供足够的源代码。例如,在GenerateDefectMap中调用GenerateImageMap如何影响任何事情,它不传递或修改矩形项,似乎只对GrayImageMap进行操作,这可能是全局的,谁知道呢


就个人而言,我不会使用System.Drawing方法,否则你必须小心边缘的插值等。我会手动转换(逐像素),这在逻辑上比你选择的Tuple系统简单得多。无论如何,这是我的意见。

你没有提供足够的信息来源。例如,在GenerateDefectMap中调用GenerateImageMap如何影响任何事情,它不传递或修改矩形项,似乎只对GrayImageMap进行操作,这可能是全局的,谁知道呢


就个人而言,我不会使用System.Drawing方法,否则你必须小心边缘的插值等。我会手动转换(逐像素),这在逻辑上比你选择的Tuple系统简单得多。这是我的看法。

你不可能轻松创建任意大小的位图。嗯,你有没有其他解决方案可以工作?160张图片只是开始。。。最后会有更多的,我想要一个稳定的算法为大量的图片,如果可能的话。我真的很感激任何想法,谢谢!不幸的是,你要求它使用标准的图像处理例程来处理这么大的东西。因为我不知道还有其他选择,这就是为什么我要求帮助的原因。有一个32k的限制,适用于GDI调用的许多或大多数参数以及Winforms控件。。此外,您不能创建非常大的位图,因为它们需要太多的连续ram。解决方法是创建保留在限制范围内的现成部分,然后使用外部库或工具将它们粘在一起。谷歌搜索“c#非常大的位图”…你无法轻松创建任意大小的位图..嗯,你有其他解决方案吗?160张图片只是开始。。。最后会有更多的,我想要一个稳定的算法为大量的图片,如果可能的话。我真的很感激任何想法,谢谢!不幸的是,你要求它使用标准的图像处理例程来处理这么大的东西。因为我不知道还有其他选择,这就是为什么我要求帮助的原因。有一个32k的限制,适用于GDI调用的许多或大多数参数以及Winforms控件。。此外,您不能创建非常大的位图,因为它们需要太多的连续ram。解决方法是创建保留在限制范围内的现成部分,然后使用外部库或工具将它们粘在一起。谷歌搜索“c#超大位图”…我使用GenerateImageMap创建StichEdImageTemp图像,以便在其中绘制矩形。矩形y轴的修改是在一个不同的函数中进行的,该函数几乎获取一个矩形作为输入,并返回一个修改后的矩形,该矩形具有不同的y轴,其计算方法是将y轴与找到当前白色区域之前扫描的图片数相乘。我不明白你手动转换的意思,你能再描述一下吗?谢谢,我使用GenerateImageMap创建StichteImageTemp图像,以便在其中绘制矩形。矩形y轴的修改是在一个不同的函数中进行的,该函数几乎获取一个矩形作为输入,并返回一个修改后的矩形,该矩形具有不同的y轴,其计算方法是将y轴与找到当前白色区域之前扫描的图片数相乘。我不明白你手动转换的意思,你能再描述一下吗?非常感谢。