我正在將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)。