Potřeboval bych poradit jak vyřešit problémy s pointery. Týká se to knihovny libjpeg
Tady je příklad:
http://afni.nimh.nih.gov/afni/doc/source/jpeg-6b_2example_8c-source.html
Ma řádku 369:
JSAMPARRAY buffer;
/** JSAMPARRAY - a 2-D array of pixels is formed by
making a list of pointers to the starts of scanlines **/
...
buffer = (*cinfo.mem->alloc_sarray)
((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
c_info je struktura s informacemi o souboru. Buffer má být pole s pointery odkazující na buffer ("Output row buffer"). Jde teda o to přidělit tomu paměť. V tom příkladu nahoře je to dobře ale mě to nějak nejde:
Ve struktuře data mám člena:
unsigned char * image_buffer;
Toto je začátek mojí funkce, kde chci přiděli tu paměť:
bool read_jpg_file(pJPEG_DATA data) // call: read_jpg_file(&data);
{
data->row_bytes_len = data->d_info.output_width * (data->d_info.output_components);
data->pRowsArray = (data->d_info.mem->alloc_sarray)
((j_common_ptr) &data->d_info, JPOOL_IMAGE, data->row_bytes_len, 1);
K data->pRowArray mám tuto hlášku:
warning: assignment from incompatible pointer type
Co dělám špatně a jak to opravit?
Pak tam mám ještě dva podobné problémy ve smyčce pro čtení:
(void) jpeg_read_scanlines(&data->d_info, data->pRowsArray, 1);
warning: passing argument 2 of 'jpeg_read_scanlines' from incompatible pointer type
note: expected 'JSAMPARRAY' but argument is of type 'JSAMPLE ***'|
JSAMPLE jsem ale nikde nedeklaroval.
A poslední chybu mám v main():
jpeg_finish_compress(&data.d_info);
podle example.c mají
jpeg_finish_compress(&cinfo);
note: expected 'j_compress_ptr' but argument is of type 'struct jpeg_decompress_struct *'|
ale já mám cinfo uložení v &data.d_info (dekompres info pro čtení) a &data.c_info (compress info pro zápis).
Můžete poradit jak to opravit?
Kompletní definice typu pro data: