public void draw_edges(byte[] buf_base, int buf_offset, int wrap, int width, int height, int w)
{
//uint8_t *ptr, *last_line;
byte[] ptr_base;
byte[] last_line_base;
int ptr_offset;
int last_line_offset;
int i;
last_line_base = buf_base;
last_line_offset = buf_offset + (height - 1) * wrap;
for (i = 0; i < w; i++)
{
/* top and bottom */
Array.Copy(buf_base, buf_offset, buf_base, buf_offset - (i + 1) * wrap, width);
//memcpy(buf - (i + 1) * wrap, buf, width);
Array.Copy(last_line_base, last_line_offset, last_line_base, last_line_offset + (i + 1) * wrap, width);
//memcpy(last_line + (i + 1) * wrap, last_line, width);
}
/* left and right */
ptr_base = buf_base;
ptr_offset = buf_offset;
for (i = 0; i < height; i++)
{
Arrays.Fill(ptr_base, ptr_offset - w, ptr_offset - w + w, ptr_base[ptr_offset]);
//memset(ptr - w, ptr[0], w);
Arrays.Fill(ptr_base, ptr_offset + width, ptr_offset + width + w, ptr_base[ptr_offset + width - 1]);
//memset(ptr + width, ptr[width-1], w);
ptr_offset += wrap;
}
/* corners */
for (i = 0; i < w; i++)
{
Arrays.Fill(buf_base, buf_offset - (i + 1) * wrap - w, buf_offset - (i + 1) * wrap - w + w, buf_base[buf_offset]);
//memset(buf - (i + 1) * wrap - w, buf[0], w); /* top left */
Arrays.Fill(buf_base, buf_offset - (i + 1) * wrap + width, buf_offset - (i + 1) * wrap + width + w, buf_base[buf_offset + width - 1]);
//memset(buf - (i + 1) * wrap + width, buf[width-1], w); /* top right */
Arrays.Fill(last_line_base, last_line_offset + (i + 1) * wrap - w, last_line_offset + (i + 1) * wrap - w + w, last_line_base[last_line_offset]);
//memset(last_line + (i + 1) * wrap - w, last_line[0], w); /* top left */
Arrays.Fill(last_line_base, last_line_offset + (i + 1) * wrap + width, last_line_offset + (i + 1) * wrap + width + w, last_line_base[last_line_offset + width - 1]);
//memset(last_line + (i + 1) * wrap + width, last_line[width-1], w); /* top right */
}
}