小编Ada*_*vis的帖子

用翻译复制内存的快速方法 - ARGB到BGR

概观

我有一个图像缓冲区,我需要转换为另一种格式.原始图像缓冲区是四个通道,每通道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.如果程序集是无痛的并且显而易见的方法,我可以沿着这条路走下去,但是在这个设置上没有这样做之前让我警惕沉没太多时间了.

伪代码很好 - 我不是在寻找一个完整的解决方案,只是算法和任何可能不会立即清楚的技巧的解释.

c algorithm

65
推荐指数
7
解决办法
8159
查看次数

混合声音的算法

我有两个原始声音流,我需要加在一起.出于这个问题的目的,我们可以假设它们具有相同的比特率和比特深度(例如16比特样本,44.1khz采样率).

显然,如果我只是将它们加在一起,我将溢出并下溢我的16位空间.如果我将它们加在一起并除以2,那么每个的体积减半,这是不正确的声音 - 如果两个人在一个房间里说话,他们的声音不会变得安静一半,麦克风可以选择它们两者都没有击中限制器.

  • 那么在我的软件混音器中将这些声音组合在一起的正确方法是什么?
  • 我错了,正确的方法是将每个的体积减少一半?
  • 我是否需要添加压缩器/限制器或其他处理阶段以获得我正在尝试的音量和混音效果?

-亚当

algorithm audio

56
推荐指数
7
解决办法
4万
查看次数

通过代码旋转网页?

我希望有一种相对简单的方法可以将网页旋转一点点,大约30度左右,同时仍然保持功能齐全和可用.

我完全控制页面,并可以修改它,以便在需要时更容易.不过,我宁愿不在SVG中重写整个内容,但也许javascript和canvas会起作用吗?

有没有办法使用CSS,Javascript或其他一些允许我完成此操作的跨浏览器方法?

javascript css svg css-transforms

51
推荐指数
2
解决办法
1万
查看次数

什么时候可以在C中使用全局变量?

显然,那里的意见种类很多,其中包括" 永远!永远封装(即使它仅仅是一个宏!) "至" 这没什么大不了的 - 当它更方便时使用它们. "

所以.

具体,具体原因(最好以一个例子为准)

  • 为什么全局变量是危险的
  • 使用全局变量代替替代方案
  • 那些试图不恰当地使用全局变量的人存在哪些替代方案

虽然这是主观的,但我会选择一个答案(对我而言,这最能代表每个开发人员应该与全局人员建立的爱/恨关系),社区将投票给他们.

我相信新手有这样的参考是很重要的,但如果存在与你的答案基本相似的另一个答案,请不要混淆 - 添加评论或编辑其他人的答案.

-亚当

c global-variables

47
推荐指数
6
解决办法
4万
查看次数

给定一个音频流,找到一个门猛击(声压级计算?)

与拍手探测器不同("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位的读数,并跟踪"稳态".当算法检测到声级显着增加时,它将标记该点.

  • 你的想法是什么?
  • 你怎么会发现这个事件?
  • 声压级计算的代码示例是否有帮助?
  • 我可以减少采样频率(1kHz甚至更慢?)

更新:使用Octave(开源数值分析 - 类似于Matlab)并查看均方根是否会给我我需要的东西(这导致与SPL非常相似的东西)

Update2:在简单的情况下,计算RMS可以轻松地关闭门:
替代文字 替代文字
现在我只需要看看困难的情况(收音机,高温/高空等).CFAR看起来非常有趣 - 我知道我将不得不使用自适应算法,CFAR肯定符合要求.

-亚当

c algorithm audio signal-processing

41
推荐指数
4
解决办法
1万
查看次数

QR码(二维条码)编码和解码算法?

寻找免费/开源代码或算法描述来编码(简单)和解码(硬)2D条形码QR码.

它似乎不是一个微不足道的问题,但它在日本如此受欢迎,必须有一些已经可用的东西......

camera encode decode qr-code barcode

39
推荐指数
6
解决办法
6万
查看次数

浮点是如何存储的?什么时候重要?

在对这个问题的跟进中,似乎有些数字根本不能用浮点表示,而是近似的.

如何存储浮点数?

是否有不同尺寸的通用标准?

如果我使用浮点,我需要注意什么样的问题?

它们是否是跨语言兼容的(即,我需要处理哪些转换才能通过TCP/IP将python程序中的浮点数发送到C程序)?

-亚当

floating-point rounding-error

36
推荐指数
4
解决办法
2万
查看次数

找出两个三角形是否相交

给出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的其他实现吗?

是否有更快的算法来解决这个问题?

language-agnostic algorithm geometry collision-detection

28
推荐指数
1
解决办法
2万
查看次数

人为因素设计(满足UI设计中的心理需求)

阅读关于G.729编解码器的内容,我发现了一个关于" 舒适噪音 "的有趣内容:

还设置舒适噪声发生器(CNG),因为在通信信道中,如果传输停止,并且由于没有语音链路变得安静,则接收侧可以假设链路已被切断.通过插入舒适噪声,在静音期间播放旧的模拟嘶嘶声,以确保接收器链路是活动的和可操作的.

例如,这是一个优秀的程序员在设计VOIP软件之前需要了解的事情.

今天早些时候我还了解了Saccadic Suppression:

通过暂时减弱从视网膜流入大脑的数据,人类在眼球运动期间避免视网膜模糊.证明这种现象的一种有趣方式是用镜子看你的脸.保持头部稳定,看一只眼睛然后看另一只眼睛,迅速将你的视线转移到两者之间.图像稳定,你看不到自己的眼球运动,但另一个看着你的人会清楚地看到你的眼睛在移动.

这适用于视频游戏和其他视觉和图形开发.

有很多关于用户界面设计的书籍,但我还没有看到一个参考文献列举了我们在设计软件时应该理解的大多数人类设计因素.我希望很多软件工程师可以通过他们的裤子来了解这一点 - 他们设计它,发现奇怪的东西和/或烦人的东西,然后玩它直到感觉舒服.然而答案已经存在,研究已经完成,有人不仅知道如何解决我们的问题,而且知道为什么这是一个问题.

  • 没有获得十几个不同专业的学士/学士学位,我会在哪里寻找这类信息?
  • 我是否注定要在每日网上冲浪(许多公司/经理皱眉)中磕磕绊绊
  • 还有哪些其他人为因素会影响编程(请链接参考资料或资源,或者至少提供一个googleable技术名称 - 用标签"human-factors"交替发布一个关于它的新问题)

user-interface

27
推荐指数
4
解决办法
2459
查看次数

什么应该在一个有助于某人开发优秀的OO软件的清单上?

几年前我使用过OO编程语言和技术(主要是在C++上),但是在这段时间内,OO没有做太多.

我开始在C#中创建一个小实用程序.我可以简单地对它进行编程而不使用良好的OO练习,但对我来说应用OO技术将是一个很好的复习.

就像数据库规范化水平一样,我正在寻找一个清单,它会让我想起一个"好的"面向对象程序的各种经验法则 - 一个简洁的是/否列表,我可以在设计和实现过程中偶尔阅读以防止我从思考和程序上的工作.如果它包含适当的OO术语和概念将更加有用,以便任何检查项目都可以轻松搜索以获取更多信息.

什么应该在一个有助于某人开发优秀的OO软件的清单上?

相反,可以应用什么"测试"来显示软件不是OO?

c# oop

25
推荐指数
8
解决办法
2727
查看次数