Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ опять не могу найти ошибку =\ http://www.cyberforum.ru/cpp-beginners/thread421137.html
#include <iostream> using std::cout; using std::endl; int main() { for (int i=1;i<=1000000;i++) { int b=0;
C++ Статическая память,Динамическая память. a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты левого нижнего элемента и правого верхнего элемента. b) Динамическая память. Одномерный массив. Дан массив целых чисел.(создать массив) http://www.cyberforum.ru/cpp-beginners/thread421135.html
C++ Дано натуральное число с различными цифрами. Определить, максимальная цифра числа расположена ближе к началу или концу числа
Дано натуральное число с различными цифрами. Определить, максимальная цифра числа расположена ближе к началу или концу числа. напр число 2491 число 9 находится ближе к концу напр число 47461 число 7 находится ближе к началу
Непонятные символы.(Строки и указатели). C++
Добрый вечер. Задание - Написать программу получения строки, в которой удалены все “лишние” пробелы, т.е. из нескольких подряд идущих пробелов оставить только один. #include "stdafx.h" #include <stdio.h> #include "iostream" using namespace std;
C++ Inline Assembler & C++ http://www.cyberforum.ru/cpp-beginners/thread421124.html
int main(int argc, char *argv) { perevod(); cout<<"Type Esc to Escape \n"; __asm { mov ah,01h int 21h cmp ax,01
C++ Программа, которая считывает число с клавиатуры и находит ближайшее справа число, которое является квадратом натурального числа Написать программу, которая считывает число с клавиатуры и находит ближайшее справа число, которое является квадратом натурального числа, и выводит его на экран. Проверку "квадрат – не квадрат" оформить в виде функции. подробнее

Показать сообщение отдельно
Solovei95
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 14
01.01.2012, 11:54  [ТС]     JPEG в char массиве
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]);
    }
}
Вот весь код.
 
Текущее время: 22:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru