static guchar * create_grayscale_buffer (guint16 *buffer, guint width, guint height) { gint i,j; gint size; guchar *grayscale_buffer; size = width * height * sizeof (guchar) * 3; grayscale_buffer = g_slice_alloc (size); /*Paint it white*/ memset (grayscale_buffer, 255, size); for (i = 0; i < width; i++) { for (j = 0; j < height; j++) { guint16 value = round (buffer[j * width + i] * 256. / 3000.); if (value != 0) { gint index = j * width + i; grayscale_buffer_set_value (grayscale_buffer, index, value); } } } return grayscale_buffer; }
static guchar * create_grayscale_buffer (BufferInfo *buffer_info, gint dimension_reduction) { gint i,j; gint size; guchar *grayscale_buffer; guint16 *reduced_buffer; reduced_buffer = buffer_info->reduced_buffer; size = buffer_info->width * buffer_info->height * sizeof (guchar) * 3; grayscale_buffer = g_slice_alloc (size); /*Paint is white*/ memset (grayscale_buffer, 255, size); for (i = 0; i < buffer_info->reduced_width; i++) { for (j = 0; j < buffer_info->reduced_height; j++) { if (reduced_buffer[j * buffer_info->reduced_width + i] != 0) { gint index = j * dimension_reduction * buffer_info->width + i * dimension_reduction; grayscale_buffer_set_value (grayscale_buffer, index, 0); } } } return grayscale_buffer; }