c++转换位包装int * * MATLAB unisgned char mxArray使用墨西哥人吗?
2视图(30天)
显示旧的评论
你好,
有人能帮我失去我的心灵在确定这里是错的…我有一个c++数组的int值(
int * * pColors -从Kinect SDK提供网- >色鬼&pColors电话-
但这不该IMHO)这只是三胞胎的字节大小的0 - 255 (0 xff) rgb颜色值(这工作,可以读/打开好c++),我现在想读到并使用MATLAB作为mxArray将结构的一部分,还持有的coresponding顶点数量这些coresponding rgb颜色每个(所以顶点的数量等于数量的颜色。
numVertices = numColors
)…我什么都试过漂亮的多,几乎不失败和/或降低了MATLAB(毫无疑问,我试图访问的部分内存不保留)。
这是我用来创建一个
颜色
mxArray存储有效的c++数据(我可以阅读和打开它好一些c++代码):
intcolorsIndSize [2] = {1, numColors};
颜色= mxCreateNumericArray (3 colorsIndSize mxUINT8_CLASS mxREAL);
但之后,我不得不使用这一个c++指针用于我的墨西哥人代码(
mxGetPr
而不是
mxGetUint8s
因为我不能使用“-R2018a”继承了大量的代码和添加,很多错误):
无符号char * colorsptr = (unsigned char *) mxGetPr(颜色);
所以现在遍历一个真正的c++数据和存储的
颜色
mxArray使用
corolsptr
指针(待符合coresponding vertexIndex)我使用:
为(unsigned int t = 0, vertexIndex = 0;t < numVertices / 3;+ + t, vertexIndex + +)墨西哥人
{
unsigned int color0 = pColors [vertexIndex];
如果(color0 > 0) mexPrintf (“发现一个? \ n”);
colorsptr (t * 3) = ((color0 > > 16) & 0 xff);
colorsptr (t * 3 + 1) = ((color0 > > 8) & 0 xff);
colorsptr [t * 3 + 2] = (color0 & 0 xff);
}
但这只是不会给我结果(只是挂着,似乎开始写出一些mexPrintf一旦但我从未看到现在完成)……我也试过其他维度的值大小和我不能找出是什么问题…谁能请帮助?
也许我应该专注于通过Visual Studio调试,但我现在不能附着在MATLAB程序出于某种原因,尽管我试过了,也许我只是不理解指针的算术mxArray什么
mxCreateNumericArray
创建和如何访问它的物品通过添加和乘法,或者是使用无符号字符代替uint8我认为是相同的大小做坏事?
蒂雅
注:
一度我用各种大小和遍历选项并得到一个输出代码等问题却疯狂的大小
3 x numVertices x 129
(我不明白我怎么能得到129如果这应该是8位颜色)……虽然当时穿越三种颜色代码变体一样一些适用于c++的原始代码,但在这种情况下我刚刚即使是一个简单的
1 x (numVertices * 3)
或
3 x numVertices
已打开的颜色从c++ int * *数组。
0评论
接受的答案
詹姆斯Tursa
2019年6月9日
编辑:詹姆斯Tursa
2019年6月9日
一些问题:
1)mxCreateNumericArray根据医生的签名是:
mxArray* mxCreateNumericArray (mwSize ndim, const mwSize *会变暗,
mxClassIDclassid,mxComplexityComplexFlag);
所以你为什么使用int,第二个参数时应该mwSize ?这可能是一个4字节和8字节整数大小不匹配。很容易崩溃的原因。
2)这段代码:
intcolorsIndSize [2] = {1, numColors};
颜色= mxCreateNumericArray (3 colorsIndSize mxUINT8_CLASS mxREAL);
colorsIndSize数组有两个元素,但是在第二行你告诉mxCreateNumericArray它有三个元素。这将导致mxCreateNumericArray读出数组的末尾到无效的内存中。这也容易导致崩溃。取代它可你可能意味着:
mwSizecolorsIndSize [2] = {3 numColors};/ /改变了13,int, mwSize
颜色= mxCreateNumericArray (2 colorsIndSize mxUINT8_CLASS mxREAL);/ /改变了32
3)我困惑。你不止一次提到c++ int * *数组,但我没有看到任何这样的事在你的代码。pColors的定义究竟是什么?
4)numColors等于numVertices / 3 ?如果不是那么你有另一个问题。