使用BufferedImage的多线程绘图

问题描述 投票:0回答:1

我有一个学校作业,我必须有多个线程在图像上绘制矩形。进行中的形状不能重叠(即,两个线程不能同时尝试在同一区域中绘制)我必须使用get / setRGB来执行此操作,但是我正在设法提供这种排除方法。我在想关键资源将是每个区域中的像素,那么我将如何让每个线程锁定单个像素?

java multithreading bufferedimage java-threads thread-synchronization
1个回答
0
投票

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

DrawingRectangle是您自己的类,该类具有对BufferedImage的引用,并且它知道其内部的偏移量。它有自己的get / setRGB方法,它们仅添加其X和Y偏移量,并调用BufferedImage get / setRGB。因此,该系统的客户只需获取DrawingRectangle即可访问它,就好像它是其自己的BufferedImage一样,具有它们所请求的大小。

这里的诀窍是必须同步您的allocateRectangle和freeRectangle方法,以便分配一个的过程不会被另一个试图分配自己的线程中断。如果您想优化包装,那么管理二维空间将非常棘手,但是至少从一开始我就不会打扰。只需将其想象为矩形在顶部对齐的行。如果下一个新的行将不适合现有行,则创建一个新行,该行从最低行的最高矩形正下方开始。

© www.soinside.com 2019 - 2024. All rights reserved.