重叠区域颜色显示问题bug?

摘自:http://blog.gmane.org/gmane.comp.graphics.agg

代码如下:

void TestOverlappedColorProblem()

{

agg::rendering_buffer &rbuf = rbuf_window();

agg::pixfmt_bgr24 pixf(rbuf);

typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type;

renderer_base_type renb(pixf);

typedef agg::renderer_scanline_aa_solid<renderer_base_type> renderder_scanline_type;

renderder_scanline_type rensl(renb);

agg::rasterizer_scanline_aa<> ras;

agg::scanline_u8 sl;

ras.reset();

renb.clear(agg::rgba8(255, 255, 255));

{ // box 1

agg::path_storage path;

path.move_to(100, 100);

path.line_to(100, 300);

path.line_to(300, 300);

path.line_to(300, 100);

path.line_to(100, 100);

ras.add_path(path);

}

{ // box 2

agg::path_storage path;

path.move_to(200, 200);

path.line_to(200, 400);

path.line_to(400, 400);

path.line_to(400, 200);

path.line_to(200, 200);

agg::conv_stroke<agg::path_storage> stroke(path);

stroke.width(2);

ras.add_path(stroke);

}

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(0, 0, 0));

}

渲染的结果:可以看到box2的轮廓线在box1的内部,显示为白色,问题是明明采用的是黑色的画刷。

可以通过多次调用render_scanlines_aa_solid,避免这种问题,但是效率不高!!!

邮件原文如下:

Hi, I‘m working on drawing images with simple boxes. I‘ve got a problem with the color of overlapping boxes.

The code I wrote is as follows:

using pixfmt_type     = agg::pixfmt_rgba32;

using renbase_type    = agg::renderer_base<pixfmt_type>;

using renderer_type   = agg::renderer_scanline_aa_solid<renbase_type>;

using rasterizer_type = agg::rasterizer_scanline_aa<>;

using scanline_type   = agg::scanline_p8;

rbase.clear(agg::rgba(1, 1, 1));

{ // box 1

agg::path_storage path;

path.move_to(100, 100);

path.line_to(100, 300);

path.line_to(300, 300);

path.line_to(300, 100);

path.line_to(100, 100);

ras.add_path(path);

}

{ // box 2

agg::path_storage path;

path.move_to(200, 200);

path.line_to(200, 400);

path.line_to(400, 400);

path.line_to(400, 200);

path.line_to(200, 200);

agg::conv_stroke<decltype(path)> stroke(path);

stroke.width(2);

ras.add_path(stroke);

}

ren.color(agg::rgba(0, 0, 0));

agg::render_scanlines(ras, sl, ren);

One box is a simple stroke and the other is a filled box.

I expected the overlapping region will also be painted with black, but it‘s painted with white.

时间: 2024-10-04 15:56:47

重叠区域颜色显示问题bug?的相关文章

计算两幅图像的重叠区域

http://www.cnblogs.com/dwdxdy/p/3232331.html 随笔- 87  文章- 0  评论- 81 [OpenCV学习]计算两幅图像的重叠区域 问题描述:已知两幅图像Image1和Image2,计算出两幅图像的重叠区域,并在Image1和Image2标识出重叠区域. 算法思想: 若两幅图像存在重叠区域,则进行图像匹配后,会得到一张完整的全景图,因而可以转换成图像匹配问题. 图像匹配问题,可以融合两幅图像,得到全景图,但无法标识出在原图像的重叠区域. 将两幅图像都

【OpenCV学习】计算两幅图像的重叠区域

问题描述:已知两幅图像Image1和Image2,计算出两幅图像的重叠区域,并在Image1和Image2标识出重叠区域. 算法思想: 若两幅图像存在重叠区域,则进行图像匹配后,会得到一张完整的全景图,因而可以转换成图像匹配问题. 图像匹配问题,可以融合两幅图像,得到全景图,但无法标识出在原图像的重叠区域. 将两幅图像都理解为多边形,则其重叠区域的计算,相当于求多边形的交集. 通过多边形求交,获取重叠区域的点集,然后利用单应矩阵还原在原始图像的点集信息,从而标识出重叠区域. 算法步骤: 1.图像

NGUI在Unity中因更改窗口区域而出现Bug的处理

最近,在Unity5.0.1中遇到了NGUI中的一些BUG问题,比如,你用NGUI开发进行拖拽Sprite 的功能,或者在一些Lable上使用了dynamic font, 然后把它编译成可在PC上运行的exe可执行 文件 (记得 Player Settings的Resolution中勾上Resizealbe Window),  当它运行时,这时你就 会发现问题来了,比如打开时是720*480大小的窗口区域,然后你通过拖拽窗口边界,或者直接 进行窗口最大化放大,这时你会发现UI Root中的Spr

memcpy不能复制内存重叠区域

下面s和s2指向的内存区域有重叠,memcpy不能正确复制,src赋值给dst时,可能会修改自身的值 char s[] = "abcdefghij"; char *s2 = s + 4; memmove(s2, s, strlen(s2)+1);//s2的最后一个未知 为'\0'字符,从s位置开始复制,不能多一个元素覆盖了结尾的'\0' cout << s2 << endl;//只复制strlen(s2)个字节,s2输出abcdef,strlen(s2)的值为6

判断两个矩形相交以及求出相交的区域

问题:给定两个矩形A和B,矩形A的左上角坐标为(Xa1,Ya1),右下角坐标为(Xa2,Ya2),矩形B的左上角坐标为(Xb1,Yb1),右下角 坐标为(Xb2,Yb2).(1)设计一个算法,确定两个矩形是否相交(即有重叠区域)(2)如果两个矩形相交,设计一个算法,求出相交的区域矩形 (1)       对于这个问题,一般的思路就是判断一个矩形的四个顶点是否在另一个矩形的区域内.这个思路最简单,但是效率不高,并且存在错误,错误在哪里,下面分析一 下. 如上图,把矩形的相交(区域重叠)分成三种(可

两个视图交互,bitmap绘制重叠时重影问题

从设计的角度来讲,应该尽量避免视图的交互重叠. 在新项目的一个动效开发过程中,两个视图在动效的过程中,有重叠,而这两个视图显示的bitmap是实时绘制显示的,因此意外的出现了重影问题.放慢动画速度,发现上层视图的bitmap部分透明显示了底层视图才出现了重影.检查bitmap像素,发现alpha通道不存在,也就是bitmap并不是透明的,置于绘制的时候为什么出现这样,原因尚未找到. android对重叠区域的绘制提供了PorterDuff.Mode标志来设置重叠区域的具体绘制,因此通过该标志解决

2014 acm亚洲区域赛(北京)总结

2014 acm/icpc 亚洲区域赛北京站    第一次到外面去比赛,周五下午做高铁到北京,报到注册后就去找在北京的同学玩了.    周六,上午,随便拉了个cf,我们随便看了下,没有写代码.下午的开幕式就那样,几个领导讲几句话,之后的热身赛,A题是数试题集出现多少次ACM,我们理解为在这题出现了多少次?第一次交了个17,wa掉了,交了个19,又wa了,后来好像又交了个13,都wa掉了,想哭了%>_<%,后面的D题更逗,给一段代码,判断是wa还是TLE,只有一个测试文件,并且样例数<=3

Android获取窗口可视区域大小: getWindowVisibleDisplayFrame()

getWindowVisibleDisplayFrame()方法 getWindowVisibleDisplayFrame()是View类下的一个方法,从方法的名字就可以看出,它是用来获取当前窗口可视区域大小的.就是contentParentView +actionbar的高度 此方法的原型为 public void getWindowVisibleDisplayFrame(Rect outRect); 1 它接受一个Rect对象作为参数,执行过程中会根据当前窗口可视区域大小更新outRect的

[整理]内存重叠之memcpy、memmove

函数原型: void *memcpy( void *dest, const void *src, size_t count ); void *memmove( void* dest, const void* src, size_t count );  1.memcpy和memmove相同点都是用于从src拷贝count个字节到dest. 2.memcpy和memmove区别如果目标区域和源区域有重叠的话:memcpy不能够确保源串所在重叠区域在拷贝之前被覆盖.memmove能够保证源串在被覆盖之