我在Mac OS X(10.6.7)下遇到了GUI /线程相关的问题.我正在使用wxWidgets框架(版本2.9.1),在我的情况下它依赖于Cocoa.应用程序设计如下:
与大多数其他GUI框架一样,Cocoa不是线程安全的,因此我们确保从线程#2内部执行所有GUI调用,并在需要时传递消息.然而,在这种特殊情况下,在初始化期间(从NSUndoManager更加精确)从Cocoa的内部提出断言,实质上说"在主线程之外使用我是不安全的".即使线程#2是关于 GUI相关的任何内容的主线程.
好吧,NSUndoManager必须有办法找出它正在运行主线程(可能使用NSThread :: isMainThread()).所以我的问题是:是否有可能欺骗NSUndoManager(以及一般的Cocoa)?更好的是,将线程#2声明为"主线程",线程#1成为次要线程?基本上,我需要一个API调用,如"让调用线程成为主要线程".没有文档的魔法和Objective C++也很好,只要它也可以在OS X 10.5上运行.
PP代码,就像现在一样,在Windows/Linux/MacOSX + Carbon下完美运行.此外,重新设计它以改变线程结构将是一个巨大的痛苦.
假设我必须读取一个包含一堆浮点数的文件.这些数字可以像1e+10,5,-0.15等等,即任何通用的浮点数字,用小数点(这是固定的!).但是,我的代码是另一个应用程序的插件,我无法控制当前的区域设置.例如,它可能是俄语,并且LC_NUMERIC规则要求使用小数逗号.因此,Pi预计拼写为"3,1415 ......",并且
sscanf("3.14", "%f", &x);
Run Code Online (Sandbox Code Playgroud)
返回"1",x包含"3.0",因为它拒绝解析过去的'.' 在字符串中.
我需要忽略这些数字解析任务的语言环境.
怎么做到这一点?
我可以写一个parseFloat函数,但这似乎是浪费.
我还可以保存当前的语言环境,将其暂时重置为"C",读取文件,然后恢复到保存的文件.这有什么性能影响?在某些操作系统/ libc组合中,setlocale()可能会非常慢,它在幕后真的做了什么?
另一种方式是使用iostreams,但他们的表现并不是很好.
所以我很困惑.在这种情况下你们做了什么?
干杯!
我正在使用gnuplot绘制一些数据曲线,它们看起来像这样:

但是,图例中的线条样本太薄.如果有更多曲线,则很难区分颜色.您可以使用"linewidth"增加曲线的粗细,例如,通过在plot命令中添加"lw 3",您就可以得到:

然而,这增加了各处的厚度.是否可以仅在图例中使线条变粗?我知道它可以通过对输出.png文件进行后处理来"完成另一种方式".但有没有直接的方法,使用一些gnuplot设置/魔法?
简而言之:我不能从JPEG照片的RGB值中提取有意义的光强度,并且试图考虑伽马校正或sRGB只会使事情变得更糟.
我正在做一个玩具项目,涉及处理一堆照片图像,用间隔计拍摄.基本上,我想用它们做一个时间流逝,进行一些修正,使剪辑更整洁.我用的是佳能dSLR.
我需要一个函数,在给定JPEG文件的情况下,它会计算出"平均场景亮度".结果应该是一个简单的数字; 不需要在任何绝对光度单位中表达,我只做相对比较.因此,例如,你拍摄一些房间的照片,然后函数返回"5.0".然后在灯光下添加第二个灯泡,与第一个灯泡完全相同,放在旁边,再次拍摄.该功能现在应该给你"10.0".
因此,我目前对此功能的实现结合了以下几个方面:ISO感光度,快门速度,光圈(从EXIF中提取)和平均图像亮度.Exif的东西显然更重要,因为在自动模式下,相机会尝试使用这样的设置,因此图像亮度会在中灰点附近.然而,ISO /快门/光圈设置的分辨率均为1/3或更低,因此检测图像亮度对于"微调"非常重要.
在我这样做的时候,我得到了一些明显的虚假结果,我挖的越多,我就越困惑.所以最后我设置了一个"几乎认真"的实验:
测试设置: 房间内的简单墙壁,用白炽灯照明,照明非常均匀.使用两个相机来比较结果:5D与50mm素数,350D与35mm素数.到墙的距离:约3米.所有照片均以1/10秒的快门速度拍摄.相机设置:手动,"忠实模式"(无增强功能,无饱和度或对比度凹凸),Tungsten WB,无自定义功能,JPEG-Fine,sRGB色彩空间.镜头没有过滤器.照明不会改变,我只改变ISO和光圈设置.以下是我得到的结果:
Avg Spd ISO Aperture
1. 0.3507, 0.10, 100, f/2.8
2. 0.5382, 0.10, 200, f/2.8
3. 0.3557, 0.10, 200, f/4.0
4. 0.2709, 0.10, 200, f/5.0
5. 0.2118, 0.10, 200, f/5.6
6. 0.1718, 0.10, 200, f/6.3
7. 0.1459, 0.10, 200, f/7.1
8. 0.1112, 0.10, 200, f/8.0
9. 0.0883, 0.10, 200, f/9.0
Run Code Online (Sandbox Code Playgroud)
第一列是平均像素值(直接来自JPEG),在整个图像上平均,转换为灰度为(R + G + B)/ 3.通过将[0..255]范围除以255,将颜色在[0..1]范围内归一化.因此,在1)和2)之间,我只更改ISO设置,图像应变为亮度的两倍,但平均像素值仅上升53%(没有任何过度曝光的区域).
2..3:光圈一个停止,所以图像应该变亮一半,所以1)和3)一致(额外的亮度可能是由于渐晕减少)
3..5:再次,一次停止,5)应该是3)的亮度的一半
5..8:同样,应该是一半(这基本上没问题).
这一切都非常非常奇怪.顺便说一下,两台相机之间的结果是一致的,这表明这不仅仅是特定型号的特殊性.
这没有应用任何伽马校正.JPEG读取代码使用C++,基本上遵循IJG示例代码(djpeg实用程序).现在,JPEG保存了伽马校正值,因此像素值应该被视为sRGB颜色空间中的值(获取源像素,转换为[0..1],并应用sRGB->线性RGB变换.让我们尝试一下:
Avg Spd ISO Aperture
1. 0.1140, …Run Code Online (Sandbox Code Playgroud)