2013-12-22 6 views
1

Когда я пытаюсь построить этот код, линия struct my_error_mgr jerr; дает ошибку «переменная имеет незавершенный тип„структура my_error_mgr“переменная имеет незавершенный тип «STRUCT my_error_mgr»

#import "Engine.h" 
#include "jpeglib.h" 

@implementation Engine 
+(void)test{ 
    struct jpeg_decompress_struct cinfo; 
    struct my_error_mgr jerr; 
    FILE * infile; 

    if ((infile = fopen(filename, "rb")) == NULL) { 
     fprintf(stderr, "can't open %s\n", filename); 
     return 0; 
    } 

    cinfo.err = jpeg_std_error(&jerr.pub); 
    jerr.pub.error_exit = my_error_exit; 

    if (setjmp(jerr.setjmp_buffer)) { 
     jpeg_destroy_decompress(&cinfo); 
     fclose(infile); 
     return 0; 
    } 

    jpeg_create_decompress(&cinfo); 

    jpeg_stdio_src(&cinfo, infile); 

    (void) jpeg_read_header(&cinfo, TRUE); 

    jvirt_barray_ptr* coeffs_array; 
    coeffs_array = jpeg_read_coefficients(&cinfo); 

    BOOL done = FALSE; 
    for (int ci = 0; ci < 3; ci++) 
    { 
     JBLOCKARRAY buffer_one; 
     JCOEFPTR blockptr_one; 
     jpeg_component_info* compptr_one; 
     compptr_one = cinfo.comp_info + ci; 

     for (int by = 0; by < compptr_one->height_in_blocks; by++) 
     { 
      buffer_one = (cinfo.mem->access_virt_barray)((j_common_ptr)&cinfo, coeffs_array[ci], by, (JDIMENSION)1, FALSE); 

      for (int bx = 0; bx < compptr_one->width_in_blocks; bx++) 
      { 
       blockptr_one = buffer_one[0][bx]; 

       for (int bi = 0; bi < 64; bi++) 
       { 
        blockptr_one[bi]++; 
       }     
      } 
     } 
    } 

    write_jpeg(output, &cinfo, coeffs_array); // saving modified JPEG to the output file 

    jpeg_destroy_decompress(&cinfo); 
    fclose(infile); 
} 
@end 

Когда я пытаюсь закомментируйте все строки, связанные с к этой ошибке, я тогда получаю ошибку в EXC_BAD_ACCESS выполнения на линии

(void) jpeg_read_header(&cinfo, infile); 

Я пытаюсь изменить коэффициенты ДКП сохраненного изображения JPEG в прошивкой с конечной целью создания стеганографии приложение JPEG. у меня есть следующий код, пытающийся dd один на каждый коэффициент DCT. Я использую библиотеку libjpeg. Код представляет собой комбинацию Objective-C и C.

Быстрое примечание: переменная filename равна «/ Users/ScottBouloutian/Library/Application Support/iPhone Simulator/7.0.3/Applications/27A0450E-4685- 4C3E-AAC8-A0CC6C85359E/Crypsis.app/screen.jpg ", это путь к изображению JPEG, который я пытаюсь изменить.

Что не так с кодом, который у меня есть? Это что-то немое, как недостающее, или что-то не так с моим файловым путем?

ответ

4

Независимо от того, что struct my_error_mgr, компилятор не может найти свое объявление как тип. Вам нужно включить заголовок, который имеет это объявление.

Смежные вопросы