小编rwb*_*rwb的帖子

STL Vector默认使用'new'和'delete'进行内存分配吗?

我正在为应用程序创建一个插件,其中应该由应用程序分配内存并跟踪它.因此,应该以缓冲区的形式从宿主应用程序获取内存句柄,然后将它们返回给应用程序.现在,我正计划使用STL Vectors,我想知道它在内部使用什么样的内存分配.

它是否在内部使用"新"和"删除"功能?如果是这样,我可以用自己的函数重载'new'和'delete'吗?或者我应该创建自己的模板分配器,这对我来说看起来很困难,因为我没有创建自定义模板的经验.

欢迎任何建议/示例代码.可以从这样的应用程序中获取内存句柄

void* bufferH = NULL;

bufferH = MemReg()->New_Mem_Handle(size_of_buffer);
MemReg()->Dispose_Mem_Handle(bufferH); //Dispose it
Run Code Online (Sandbox Code Playgroud)

c++ memory stl allocation vector

9
推荐指数
2
解决办法
4657
查看次数

模态会话需要Mac上的模态窗口错误

我需要从视频应用程序中的插件启动模态窗口.我在Interface Builder中创建了一个Nib以及一个NSWindowController类.但是当我尝试像这样运行窗口时

Registration* newWin = [[Registration alloc] initWithWindowNibName:@"Options"];

[NSApp runModalForWindow: [newWin window]];
Run Code Online (Sandbox Code Playgroud)

它在控制台中给出了一个错误:模态会话需要模态窗口我认为它与Interface Builder有关(请原谅,我对IB很新).

这是Nib文件和类的链接.如果有人能告诉我在IB中做错了什么,我将不胜感激.谢谢.

[已删除链接]

macos cocoa objective-c interface-builder

8
推荐指数
1
解决办法
5509
查看次数

3D投影问题:Z值在透视分割后不在[1,-1]中

我正在尝试在光栅化3D点的过程中进行简单的透视投影.这是所有的矩阵和其他信息.所有矩阵都是行专业.坐标系是Right Handed.

相机位于[0,0,-1],点位于[0,0,0](矩阵运算时w = 1)

模型视图矩阵(凸轮矩阵的逆,即tx = 0; ty = 0; tz = 1):

[1 0 0 tx]
[0 1 0 ty]
[0 0 1 tz]
[0 0 0 1 ]
Run Code Online (Sandbox Code Playgroud)

透视矩阵:

[f/aspect,0,0,0]
0,f,0,0
0,0,-(near+far)/(near-far),2*far*near/(near-far)
0,0,1,0]
Run Code Online (Sandbox Code Playgroud)

aspect等于1,因为视口是方形的.远= 100且近= 0.1 f = 1/tan(fovDegress*M_PI/360);

结果矩阵是:

1.94445, 0,        0,        0
0,       1.944445, 0,        0
0,       0,        1.020202, -2.020202
0,       0,        1,        0
Run Code Online (Sandbox Code Playgroud)

现在我将模型视图矩阵然后投影矩阵应用于点向量,然后我得到一个新点Pv = {x,y,z,w}然后我得到归一化的坐标x'= x/w; y'= y/w; 和z'= z/w; 只要该点在平截头体中,x'和y'总是位于[-1,1]之间.但z'的情况并非如此.随着接近相机的点,z'值呈指数增长.当点位于[0,0,0]时,z'的值等于-1.

现在,我需要剪切一些行,所以我需要z'值介于[1,-1]之间.我想知道我的手术有什么问题.谢谢.

opengl directx 3d projection perspective

5
推荐指数
1
解决办法
2575
查看次数

具有FFT问题的高斯模糊

我有一个使用常规卷积的高斯模糊的当前实现.对于小内核来说它足够有效,但是一旦内核的大小变得更大,性能就会受到影响.所以,我正在考虑使用FFT实现卷积.我从未有过与FFT相关的图像处理经验,所以我有几个问题.

  1. 基于2D FFT的卷积是否也可分为两个1D卷积?

    • 如果为真,那么它是这样的吗 - 每行1D FFT,然后每列1D FFT,然后乘以2D内核,然后每列的逆变换和每行的逆变换?或者,在每次1D FFT变换后,我是否必须乘以1D内核?
  2. 现在我明白内核大小应该与图像大小相同(在1D的情况下为行).但它会如何影响边缘?我是否必须用零填充图像边缘?如果是这样,内核大小应该等于填充之前或之后的图像大小?

此外,这是一个C++项目,我打算使用kissFFT,因为这是一个商业项目.欢迎您提出更好的选择.谢谢.

编辑:感谢您的回复,但我还有一些问题.

  1. 我看到输入图像的虚部将全部为零.但输出虚部也会是零吗?我是否必须将高斯核与实部和虚部相乘?

  2. 我有相同图像的实例在不同尺度上被模糊,即相同的图像被缩放到不同的尺寸并且在不同的内核尺寸下被模糊.每次缩放图像时都必须执行FFT还是可以使用相同的FFT?

  3. 最后,如果我想要显示FFT,我知道必须将一个对数滤波器应用于FFT.但我真的迷失在哪个部分应该用于可视化FFT?真实的部分或虚部.

  4. 对于尺寸为512x512的图像,实部和虚部的大小也是如此.它们的长度是一样的吗?

再次感谢您的详细回复.

c++ fft image-processing convolution kissfft

5
推荐指数
2
解决办法
3411
查看次数

GetOpenFileName在64位失败,但在32Bit中工作?

我有以下代码,我用来使用Win32 API打开文件打开对话框.它在32位工作正常,但在64位(在DLL中)使用时失败.我究竟做错了什么?

 char Filestring[256];
Filter = "OBJ files\0*.obj\0\0";
char* returnstring = NULL;



OPENFILENAME opf;
opf.hwndOwner = mainHWND;
opf.lpstrFilter = Filter;
opf.lpstrCustomFilter = 0;
opf.nMaxCustFilter = 0L;
opf.nFilterIndex = 1L;
opf.lpstrFile = Filestring;
opf.lpstrFile[0] = '\0';
opf.nMaxFile = 256;
opf.lpstrFileTitle = 0;
opf.nMaxFileTitle=50;
opf.lpstrInitialDir = Path;
opf.lpstrTitle = "Open Obj File";
opf.nFileOffset = 0;
opf.nFileExtension = 0;
opf.lpstrDefExt = "*.*";
opf.lpfnHook = NULL;
opf.lCustData = 0;
opf.Flags = (OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT) & ~OFN_ALLOWMULTISELECT;
opf.lStructSize = sizeof(OPENFILENAME);

if(GetOpenFileName(&opf))
{
    returnstring = opf.lpstrFile; …
Run Code Online (Sandbox Code Playgroud)

windows 64-bit winapi openfiledialog

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

C++将pair <int,int>的向量复制到向量<int>

我有一个对的向量,我需要将它们线性复制到一个向量的向量.我有以下代码,它运行良好,但我不确定在C++中考虑struct padding问题是否安全.

std::vector < std::pair<int, int> > test_vector;
for (int i=0;i<5;i++) {
    test_vector.push_back(std::make_pair(i,i*5));
}
std::vector<int> int_vec(test_vector.size() * 2);
std::copy(reinterpret_cast<int*>(&(*test_vector.begin())),reinterpret_cast<int*>(&(*test_vector.end())),int_vec.begin());
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是 - 上述代码是否安全?如果没有,是否有一种优雅的方式来做而不编写循环?

c++ struct stl stdvector std-pair

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

Windows上的Fat Binary?

我知道在Mac OS X上,您可以使用lipo将针对不同体系结构的多个二进制文件组合成一个二进制文件.我想知道Windows方面是否有类似的解决方案.谢谢.

windows binary macos dll

1
推荐指数
1
解决办法
986
查看次数