我正在将 C++ 程序转换为 Java,并且遇到了障碍,因为 java 中没有 memcpy。
在做了一些研究之后,我已经尽力而为,但我真的很犹豫,不确定这是否像 C++ 程序应该做的那样,因为我发现到目前为止我发现的信息有点令人困惑。
(Java 代码中仍有 memcpy,但已注释掉以供参考)
图像
= 输入图像
输出 = 输出图像
N = 图像宽度
M = 图像高度。
在 C++ 代码中,元素是无符号短整型。
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)。