Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Solovei95
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 14
#1

JPEG в char массиве - C++

31.12.2011, 18:48. Просмотров 1084. Ответов 4
Метки нет (Все метки)

Скажите, как сделать JPEG как массив из байтов? Я использую библиотеку libjpeg.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2011, 18:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос JPEG в char массиве (C++):

Русские символы в массиве char - C++
имеется функция возвращающая массив байтов(символов), если данная строка английское слово то все нормально, иначе получается...

Поиск цифр в массиве char - C++
Задание: вводится строка из любых символов в ней ищутся цифры которые есть и выводятся только они непонимаю в чем ошибка ничего не выводит...

Замена символов в массиве char - C++
Всем привет! Задача: исходная строка (char) содержит числа десятичной системы счисления. Найти их, создать новую строку, в которой...

Вычислить математическое выражение в массиве char - C++
Задача: Если в строке находиться математическое выражение, то посчитать его. Возможно ли это сделать, какими нибудь стандартными...

Удаление последнего символа в массиве char - C++
Здравствуйте, создаю массив chat Text; GetWindowText(GetDlgItem(hTab, id), Text, 200); strcat(Text, "*"); ...

Поиск слова в массиве символов char - C++
Получаю массив символов типа char из com port. есть ли способ поиска в этом массиве необходимого слова кроме как побайтово копировать ...

4
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.01.2012, 10:07 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Solovei95, да простой файл откройте бинарно и прочитайте. fread в помощь Вам.
0
Solovei95
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 14
01.01.2012, 10:12  [ТС] #3
А если создавать compress ? То как его создать как char массив?
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.01.2012, 10:42 #4
Solovei95, покажите код, который вызывает у вас проблемы. А то так не понять
0
Solovei95
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 14
01.01.2012, 11:54  [ТС] #5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <zlib.h>
#include <png.h>
#include <jpeglib.h>
 
char * out;
unsigned char quality;
 
void writeJPEG (FILE * f2, unsigned char ** buffer, unsigned int w, unsigned int h, unsigned char channels){
    FILE * f1;
    unsigned char * buff = {NULL};
    unsigned long length;
 
    //Создаем временный файл "temp.jpg"
    if((f1 = fopen(".../tmp/temp.jpg","wb"))!=NULL){
 
        //Важные переменные JPEG
        struct jpeg_compress_struct cinfo;
        struct jpeg_error_mgr jerr;
        JSAMPROW row_pointer[1];
        cinfo.err = jpeg_std_error(&jerr);
 
        //Создаем JPEG
        jpeg_create_compress(&cinfo);
        jpeg_stdio_dest(&cinfo,f1); //Привязать к файлу
 
        //Основные данные JPEG
        cinfo.image_width  = w; //Ширина
        cinfo.image_height = h; //Высота
        cinfo.input_components = channels; //Каналы
        cinfo.in_color_space = JCS_RGB; //Цветовой тип
        jpeg_set_defaults(&cinfo); //Привязать параметры
        jpeg_set_quality(&cinfo,quality,TRUE); //Качество
 
        //Данные sampling factor
        cinfo.comp_info[0].h_samp_factor = 1;
        cinfo.comp_info[0].v_samp_factor = 1;
        cinfo.comp_info[1].h_samp_factor = 1;
        cinfo.comp_info[1].v_samp_factor = 1;
        cinfo.comp_info[2].h_samp_factor = 1;
        cinfo.comp_info[2].v_samp_factor = 1;
 
        //Записываем JPEG данные (buffer)
        jpeg_start_compress(&cinfo, TRUE); //BEGIN
        while (cinfo.next_scanline < cinfo.image_height){
            row_pointer[0] = & buffer[cinfo.next_scanline][0];
            jpeg_write_scanlines(&cinfo, row_pointer, 1);
        }
        jpeg_finish_compress(&cinfo); //END
 
        //Завершаем запись JPEG данных
        jpeg_destroy_compress(&cinfo);
 
        //Переписываем данные JPEG в файл
        fseek(f1,SEEK_END,0);
        length = ftell(f1);
        buff = (unsigned char *)malloc(length);
        fseek(f1,SEEK_SET,0);
        fread(&buff,1,length,f1);
        fwrite(buff,1,sizeof(buff),f2);
        free(buff);
 
        fclose(f1);
    }
}
 
void loadPNG (char * szImage){
    //Инициализация файлов
    FILE * f1;
    FILE * f2;
 
    //Открываем файлы
    if((f1=fopen(szImage,"rb"))!=NULL){
    
        if((f2=fopen(out,"wb"))!=NULL){
        
            //Переменные, которые принимают данные PNG
            unsigned char sig[8];
            png_structp   png_ptr;
            png_infop     info_ptr;
            png_bytepp    row_ptr = NULL;
            png_byte      channels;
            png_uint_32   width, height;
            
            //Чтение сигнатуры
            if((fread(&sig,1,8,f1))==8 && png_sig_cmp(sig,0,8)==0){
                
                //Прочитать структуру
                png_ptr  = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
                info_ptr = png_create_info_struct(png_ptr);
                
                //Прочитать данные PNG
                if(png_ptr!=NULL && info_ptr!=NULL && setjmp(png_jmpbuf(png_ptr))==0){
                    png_init_io(png_ptr, f1); //Привязать к файлу
                    png_set_sig_bytes(png_ptr, 8); //Сигнатура PNG
                    png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_EXPAND | PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_GRAY_TO_RGB, NULL); //Прочитать PNG
                    width  =   png_get_image_width(png_ptr, info_ptr); //Ширина
                    height =   png_get_image_height(png_ptr, info_ptr); //Высота
                    channels = png_get_channels(png_ptr, info_ptr); //Количество каналов
                    row_ptr  = png_get_rows(png_ptr, info_ptr); //Ряды PNG данных
                    
                    //Записать JPEG в файл
                    if(row_ptr!=NULL)
                        writeJPEG(f2, row_ptr, width, height, channels);
                }
                png_destroy_read_struct(&png_ptr, &info_ptr, NULL); //Завершить чтение PNG
            }
            fclose(f2);
        }
        fclose(f1);
    }
}
 
void main (int argc, char ** argv) {
    quality = 90;
    out = "o.jpg";
    if (argc >= 2){
        if(argc >= 3) out = argv[2];
        if(argc >= 4) quality = atoi(argv[3]);
        loadPNG(argv[1]);
    }
}
Вот весь код.
0
01.01.2012, 11:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2012, 11:54
Привет! Вот еще темы с ответами:

Заменить звездочками совпадения в массиве char - C++
Есть два массива, один заполненный русскими буквами, а второй заполняется постепенно с клавиатуры, тоже русскими буквами. Если буквы в...

Удалить последний символ в массиве char - C++
Здравствуйте, подскажите как удалить последний символ в массиве char ? Размер массива узнаю так: Text Добавлено через 3 минуты ...

Преобразование из int в char в массиве (не обычно) - C++
Прет всем. есть файл с 2 строками 456321 hi man Нужно поставить по индексу типо если первая цифра 4, то берем 4 сивол из строки...

Шестнадцатеричные числа в массиве unsigned char - C++
Есть массив unsigned char - заполнен, и знаем длину. В массиве шестнадцатиричное число вида: 51fa9 Нужно реализовать арифметические...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru