2017-12-02 182 views
-1

我正在研究一个程序,根据输入绘制,将不同颜色的形状绘制到位图文件上,如果我只需绘制一个形状,它就可以很好地工作,但如果我例如采用两个或更多形状,它只是画出旧照片,旧照片会丢失,但我需要它们叠加以创建更复杂的照片。有没有办法当我写一个位图文件跳过我不想写的部分?我也尝试制作一个数组,其中保存所有像素数据,但如果我根据数组元素类型的大小采用比800x800大的位图,那么该数组无法工作。任何建议和评论我都乐意接受。先谢谢你。在C中创建的位图文件中覆盖2个或更多形状?

+0

800x800x3约为2兆字节,您可能达到了堆栈限制。改为在堆上分配数据。为什么不使用图像库或为什么不使用特定于操作系统的绘图函数? –

+0

非常感谢,我没有想过这个,对我来说很愚蠢,现在一切正常。我制作了一个像素结构数组并为其分配了内存,并且它完美地工作。现在我只编辑我想编辑的数组中的像素,然后写入实际的bimap文件。 – Enizimus

回答

0

您需要使用透明背景来绘制第二个图形,您将如何完成该任务完全取决于您,因为您没有提供任何关于您使用的技术的信息。

+0

对不起,没有提到所有的细节,我这样做在C和只使用标准的C库。我想通了,但我不知道该怎么做才能获得透明背景。谢谢。 – Enizimus

+0

您需要另一个位图作为掩码。在该位图中将值设置为要绘制第二个形状的所有1,其他位置为0。最后,将第一次绘制的结果与第二次绘制的结果合并:res1 [i] =(res1 [i]&〜mask [i])| (res2 [i]&mask [i])。这里'res1'是第一次绘制的结果,'res2'是第二次,'mask'是我描述的掩蔽位图,'i'是像素索引,这将从第二次绘制发生的res2中选择新值并且来自res1其他地方的现有价值。 – SoronelHaetir