Espero que la pregunta que voy a hacer no sea abusar mucho de vuestra paciencia.
Después de buscar mucho por Internet he conseguido convertir una imagen RAW a JPG. El problema es que dicha librería me guarda la imagen jpg en un archivo. Yo quiero tenerla en otro buffer para trabajar directamente con ella (al andar leyendo y escribiendo en archivos pierdo mucho tiempo). A esta función le paso entre otros parámetros pBuffer que es la imagen que quiero convertir y strOutFileName que es la ruta del archivo JPG de salida. He estado mirando el cinfo que parece que es donde guardan los parámetros de escritura del jpg para que me lo guardase en un buffer pero no lo he conseguido. ¿Alguien sabría como tengo que modificar el código para conseguir lo que pretendo?
Un saludo.
BOOL WriteRGBBytesIntoJpegFile(const CString& strOutFileName, const int nWidth, const int nHeight, const int nQuality, BYTE* pBuffer)
{
struct jpeg_compress_struct cinfo;
struct extended_error_mgr jerr;
JSAMPROW row_pointer[1];
int row_stride;
FILE* outfile;
if ((outfile = _tfopen(strOutFileName, TEXT("wb"))) == NULL) {
strError.Format(CANT_OPEN_FILE, strOutFileName);
return FALSE;
}
cinfo.err = jpeg_std_error(&jerr.pub);
jerr.pub.error_exit = extended_error_exit;
jerr.pub.output_message = extended_output_message;
jerr.pub.reset_error_mgr = extended_reset_error_mgr;
if (setjmp(jerr.setjmp_buffer)) {
jpeg_destroy_compress(&cinfo);
fclose(outfile);
return FALSE;
}
jpeg_create_compress(&cinfo);
jpeg_stdio_dest(&cinfo, outfile);
cinfo.image_width = nWidth;
cinfo.image_height = nHeight;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults(&cinfo);
jpeg_set_quality(&cinfo, nQuality, TRUE);
jpeg_start_compress(&cinfo, TRUE);
row_stride = nWidth * 3;
while (cinfo.next_scanline < cinfo.image_height) {
row_pointer[0] = & pBuffer[cinfo.next_scanline * row_stride];
jpeg_write_scanlines(&cinfo, row_pointer, 1);
}
jpeg_finish_compress(&cinfo);
fclose(outfile);
jpeg_destroy_compress(&cinfo);
return TRUE;
}