Java 使用BuffereImage的多线程绘图

Java 使用BuffereImage的多线程绘图,java,multithreading,bufferedimage,java-threads,thread-synchronization,Java,Multithreading,Bufferedimage,Java Threads,Thread Synchronization,我有一个学校作业,我必须在一个图像上画多个矩形。 进行中的形状不能重叠(即两条线不能同时在同一区域绘制) 我必须使用get/setRGB来实现这一点,但我正试图在提供这种排除时绞尽脑汁。 我认为关键的资源是每个区域中的像素,因此如何让每个线程锁定单个像素?您需要一个SpaceManager,一个集中式代理,它将为给定的BuffereImage分配矩形区域。这将需要一个allocateRectangle(int sizeX,int sizeY)方法,该方法将查找未使用的空间,将其标记为已使用,并返

我有一个学校作业,我必须在一个图像上画多个矩形。 进行中的形状不能重叠(即两条线不能同时在同一区域绘制) 我必须使用get/setRGB来实现这一点,但我正试图在提供这种排除时绞尽脑汁。
我认为关键的资源是每个区域中的像素,因此如何让每个线程锁定单个像素?

您需要一个SpaceManager,一个集中式代理,它将为给定的BuffereImage分配矩形区域。这将需要一个allocateRectangle(int sizeX,int sizeY)方法,该方法将查找未使用的空间,将其标记为已使用,并返回DrawingRectangle,以及一个freeRectangle(DrawingRectangle dr)方法,该方法将在不再使用空间时释放空间

DrawingRectangle是您自己的类,它有一个对BuffereImage的引用,并且它知道自己在其中的偏移量。它有自己的get/setRGB方法,只需添加X和Y偏移量,并调用buffereImage get/setRGB。因此,该系统的客户机只需获得一个DrawingRectangle,然后就可以访问它,就好像它是自己的BuffereImage,大小与他们请求的一样


这里的诀窍是您的allocateRectangle和freeRectangle方法必须同步,以便分配一个方法的过程不会被另一个线程中断,该线程随后会尝试分配自己的方法。如果你想优化包装,管理二维空间是很棘手的,但我不会费心,至少一开始是这样。想象一下,行是矩形的,它们在顶部对齐。如果下一个新行不适合现有行,请在最低行的最高矩形下方创建一个新行

到目前为止你试过什么?请发布您的代码。希望避免发布类规则的代码,但单线程逻辑是一个线程基本上通过图像上的形状大小数组进行迭代;对于某些确定的尺寸和坐标,根据需要填充颜色。对于多线程,我想我必须为coord区域提供互斥,但我不知道如何实现。(也许有更好的办法?)你的问题不是很具体。如果没有特定的代码描述您的特定问题,很难帮助您做到这一点。如果您不想发布一些代码,我想链接一些可以帮助您的工具:,。使用所有线程之间共享的共享资源,该资源包含线程访问的最后一个像素坐标。任何试图绘制共享资源坐标的后续线程都可以重定向到其他地方。