我有一个图像缓冲区,我需要转换为另一种格式.原始图像缓冲区是四个通道,每通道8位,Alpha,红色,绿色和蓝色.目标缓冲区是三个通道,每通道8位,蓝色,绿色和红色.
所以蛮力方法是:
// Assume a 32 x 32 pixel image
#define IMAGESIZE (32*32)
typedef struct{ UInt8 Alpha; UInt8 Red; UInt8 Green; UInt8 Blue; } ARGB;
typedef struct{ UInt8 Blue; UInt8 Green; UInt8 Red; } BGR;
ARGB orig[IMAGESIZE];
BGR dest[IMAGESIZE];
for(x = 0; x < IMAGESIZE; x++)
{
dest[x].Red = orig[x].Red;
dest[x].Green = orig[x].Green;
dest[x].Blue = orig[x].Blue;
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要比循环和三字节副本提供的速度更快的速度.鉴于我在32位机器上运行,我希望可以使用一些技巧来减少内存读写次数.
每个图像都是至少4个像素的倍数.因此我们可以处理16个ARGB字节并将它们移动到每个循环12个RGB字节.也许这个事实可以用来加快速度,尤其是它可以很好地进入32位边界.
我可以访问OpenCL - 虽然这需要将整个缓冲区移动到GPU内存中,然后将结果移回去,OpenCL可以同时处理图像的许多部分,以及大内存块移动的事实非常有效可能使这个值得探索.
虽然我已经给出了上面的小缓冲区的例子,但我真的正在移动高清视频(1920x1080),有时更大,大多数是更小的缓冲区,所以虽然32x32情况可能是微不足道的,但是逐字节复制8.3MB的图像数据是真的,非常糟糕.
在Intel处理器(Core 2及更高版本)上运行,因此我知道存在流式和数据处理命令,但不知道 - 可能指向寻找专门数据处理指令的指针也不错.
这是进入一个OS X应用程序,我正在使用XCode 4.如果程序集是无痛的并且显而易见的方法,我可以沿着这条路走下去,但是在这个设置上没有这样做之前让我警惕沉没太多时间了.
伪代码很好 - 我不是在寻找一个完整的解决方案,只是算法和任何可能不会立即清楚的技巧的解释.
我有两个原始声音流,我需要加在一起.出于这个问题的目的,我们可以假设它们具有相同的比特率和比特深度(例如16比特样本,44.1khz采样率).
显然,如果我只是将它们加在一起,我将溢出并下溢我的16位空间.如果我将它们加在一起并除以2,那么每个的体积减半,这是不正确的声音 - 如果两个人在一个房间里说话,他们的声音不会变得安静一半,麦克风可以选择它们两者都没有击中限制器.
-亚当
我希望有一种相对简单的方法可以将网页旋转一点点,大约30度左右,同时仍然保持功能齐全和可用.
我完全控制页面,并可以修改它,以便在需要时更容易.不过,我宁愿不在SVG中重写整个内容,但也许javascript和canvas会起作用吗?
有没有办法使用CSS,Javascript或其他一些允许我完成此操作的跨浏览器方法?
显然,那里的意见种类很多,其中包括" 永远!永远封装(即使它仅仅是一个宏!) "至" 这没什么大不了的 - 当它更方便时使用它们. "
所以.
具体,具体原因(最好以一个例子为准)
虽然这是主观的,但我会选择一个答案(对我而言,这最能代表每个开发人员应该与全局人员建立的爱/恨关系),社区将投票给他们.
我相信新手有这样的参考是很重要的,但如果存在与你的答案基本相似的另一个答案,请不要混淆 - 添加评论或编辑其他人的答案.
-亚当
与拍手探测器不同("Clap on!clap clap Clap off!clap clap Clap on,clap off,Clapper! clap clap ")我需要检测门何时关闭.这是一辆车,比房间或家门更容易:
听:http://ubasics.com/so/van_driver_door_closing.wav
它的采样速率为16位4khz,我希望避免大量处理或存储样本.
当您在大胆或其他波形工具中查看它时,它非常独特,并且由于车辆中声压的增加而几乎总是剪辑 - 即使窗户和其他门打开时:
听:http://ubasics.com/so/van_driverdoorclosing_slidingdoorsopen_windowsopen_engineon.wav
我希望有一个相对简单的算法可以读取4kHz,8位的读数,并跟踪"稳态".当算法检测到声级显着增加时,它将标记该点.
更新:使用Octave(开源数值分析 - 类似于Matlab)并查看均方根是否会给我我需要的东西(这导致与SPL非常相似的东西)
Update2:在简单的情况下,计算RMS可以轻松地关闭门:
现在我只需要看看困难的情况(收音机,高温/高空等).CFAR看起来非常有趣 - 我知道我将不得不使用自适应算法,CFAR肯定符合要求.
-亚当
寻找免费/开源代码或算法描述来编码(简单)和解码(硬)2D条形码QR码.
它似乎不是一个微不足道的问题,但它在日本如此受欢迎,必须有一些已经可用的东西......
在对这个问题的跟进中,似乎有些数字根本不能用浮点表示,而是近似的.
如何存储浮点数?
是否有不同尺寸的通用标准?
如果我使用浮点,我需要注意什么样的问题?
它们是否是跨语言兼容的(即,我需要处理哪些转换才能通过TCP/IP将python程序中的浮点数发送到C程序)?
-亚当
给出2组积分
((x1,y1,z1),(x2,y2,z2),(x3,y3,z3))和
((p1,q1,r1),(p2,q2,r2),(p3,q3,r3))各自在3D空间中形成三角形.
你怎么知道这些三角形是否相交?
该问题的一个显而易见的解决方案是找到由每个三角形形成的平面的方程.如果平面是平行的,则它们不相交.
否则,使用这些平面的法向矢量找出由这些平面的交点形成的线的方程.
现在,如果该线位于两个三角形区域中,则这两个三角形相交,否则不相交.
trianglesIntersect(Triangle T1, Triangle T2)
{
if(trianglesOnParallelPlanes(T1, T2))
{
return false
}
Line L1 = lineFromPlanes(planeFromTriangle(T1), planeFromTriangle(T2))
if(lineOnTriangle(T1, L1) AND lineOnTriangle(T2, L1))
{
return true
}
return false
}
Run Code Online (Sandbox Code Playgroud)
鉴于我知道如何编写上述函数,我应该考虑使用trianglesIntersect的其他实现吗?
是否有更快的算法来解决这个问题?
阅读关于G.729编解码器的内容,我发现了一个关于" 舒适噪音 "的有趣内容:
还设置舒适噪声发生器(CNG),因为在通信信道中,如果传输停止,并且由于没有语音链路变得安静,则接收侧可以假设链路已被切断.通过插入舒适噪声,在静音期间播放旧的模拟嘶嘶声,以确保接收器链路是活动的和可操作的.
例如,这是一个优秀的程序员在设计VOIP软件之前需要了解的事情.
今天早些时候我还了解了Saccadic Suppression:
通过暂时减弱从视网膜流入大脑的数据,人类在眼球运动期间避免视网膜模糊.证明这种现象的一种有趣方式是用镜子看你的脸.保持头部稳定,看一只眼睛然后看另一只眼睛,迅速将你的视线转移到两者之间.图像稳定,你看不到自己的眼球运动,但另一个看着你的人会清楚地看到你的眼睛在移动.
这适用于视频游戏和其他视觉和图形开发.
有很多关于用户界面设计的书籍,但我还没有看到一个参考文献列举了我们在设计软件时应该理解的大多数人类设计因素.我希望很多软件工程师可以通过他们的裤子来了解这一点 - 他们设计它,发现奇怪的东西和/或烦人的东西,然后玩它直到感觉舒服.然而答案已经存在,研究已经完成,有人不仅知道如何解决我们的问题,而且知道为什么这是一个问题.
几年前我使用过OO编程语言和技术(主要是在C++上),但是在这段时间内,OO没有做太多.
我开始在C#中创建一个小实用程序.我可以简单地对它进行编程而不使用良好的OO练习,但对我来说应用OO技术将是一个很好的复习.
就像数据库规范化水平一样,我正在寻找一个清单,它会让我想起一个"好的"面向对象程序的各种经验法则 - 一个简洁的是/否列表,我可以在设计和实现过程中偶尔阅读以防止我从思考和程序上的工作.如果它包含适当的OO术语和概念将更加有用,以便任何检查项目都可以轻松搜索以获取更多信息.
什么应该在一个有助于某人开发优秀的OO软件的清单上?
相反,可以应用什么"测试"来显示软件不是OO?