我正在将C++程序转换为Java,并且遇到了麻烦,因为java中没有memcpy。尝试将C++程序转换为Java。需要Memcpy帮助
在做了一些研究之后,我已经采取了最好的措施,但是我真的很犹豫,并且不确定这是否应该像C++程序那样做,因为我发现迄今发现的信息有点儿混乱。
(Java代码仍具有的memcpy但注释为refernce)
该票据两个
图片=输入图像
输出=输出图像
N =图片
M的宽度=高度图片。
在C++代码中,元素是一个unsigned short int。
C++代码
void medianfilter(element* image, element* result, int N, int M)
{
// Check arguments
if (!image || N < 1 || M < 1)
return;
// Allocate memory for signal extension
element* extension = new element[(N + 2) * (M + 2)];
// Check memory allocation
if (!extension)
return;
// Create image extension
for (int i = 0; i < M; ++i)
{
memcpy(extension + (N + 2) * (i + 1) + 1, image + N * i, N * sizeof(element));
extension[(N + 2) * (i + 1)] = image[N * i];
extension[(N + 2) * (i + 2) - 1] = image[N * (i + 1) - 1];
}
// Fill first line of image extension
memcpy(extension, extension + N + 2, (N + 2) * sizeof(element));
// Fill last line of image extension
memcpy(extension + (N + 2) * (M + 1), extension + (N + 2) * M, (N + 2) * sizeof(element));
// Call median filter implementation
_medianfilter(extension, result ? result : image, N + 2, M + 2);
// Free memory
delete[] extension;
}
Java代码迄今。
public static void medianfilter(long[] image, long[] result, int N, int M)
{
// Check arguments
if (N < 1 || M < 1)
return;
// Allocate memory for signal extension
long[] extension = new long[(N + 2) * (M + 2)];
// Create image extension
for (int i = 0; i < M; ++i)
{
//memcpy(extension + (N + 2) * (i + 1) + 1, image + N * i, N * sizeof(element));
for(int k = 0 ; k < N ; k++)
{
extension[(N+2 * (i+1)+1)+k] = image[(N*i)+k];
}
extension[(N + 2) * (i + 1)] = image[N * i];
extension[(N + 2) * (i + 2) - 1] = image[N * (i + 1) - 1];
}
// Fill first line of image extension
//memcpy(extension, extension + N + 2, (N + 2) * sizeof(element));
// Fill last line of image extension
//memcpy(extension + (N + 2) * (M + 1), extension + (N + 2) * M, (N + 2) * sizeof(element));
// Call median filter implementation
//_medianfilter(extension, result ? result : image, N + 2, M + 2);
}
我高度怀疑我做错了,只是想在这方面得到一些帮助。 (程序的其余部分很简单,因为它不使用memcpy)。