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

Нужно сохранить результат в png, a не в bmp - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Реализовать сложение двух чисел (с использованием полиморфизма) http://www.cyberforum.ru/cpp-beginners/thread1192882.html
С++ Нужно реализовать сложение двух чисел в разных СС с помощью ПОЛИМОРФИЗМА Пожалуйста помогите
C++ Где можно скачать time.h для с++? Необходимо подключить библиотеку time.h ... подключаю, пишет что не найден файл. Значит надо качать... а откуда- не нашла. Подскажите пожалуйста, или может у кого есть этот файл, скиньте ) http://www.cyberforum.ru/cpp-beginners/thread1192878.html
Написать программу. Сортировка двумерных массивов C++
Отсортировать строки двумерного массива в порядке возрастания максимальных элементов строк.
Функция Erase класса vector C++
Нужно удалить из вектора, в котором объекты авторского класса, объекты с весом более 300. Написал цикл, но при запуске пишет Iterators Incompatible ps = fruits.begin(); do { if (!count_if (fruits.begin(), fruits.end(), check300)) break; ps = find_if(ps, fruits.end(), check300); if (ps != fruits.end()) fruits.erase(ps);
C++ Инициализация полей структуры из файла http://www.cyberforum.ru/cpp-beginners/thread1192844.html
Помогите, пожалуйста, разобраться с файлами. Имеется такая структура: enum Pos {director = 1, manager, bookkeeper, secretary, worker}; struct Workers { int IDwor; string PIP;
C++ Проверить на содержание одинакового количества гласных и согласных букв Вводятся слова построчно. Проверить на содержание одинакового количества гласных и согласных букв (Вывести на экран: Podhadit/Nepodhodit) Пожалуйста, помогите... подробнее

Показать сообщение отдельно
shadv
0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 12

Нужно сохранить результат в png, a не в bmp - C++

29.05.2014, 21:34. Просмотров 489. Ответов 5
Метки (Все метки)

Вот мой код, сохраняющий рисунок(фиолетовый квадрат) в bmp
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
#include <string>
#include <vector>
#include <cmath>
#include <limits>
 
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <png.h>
#include <string.h>
#include <setjmp.h>
 
using namespace std;
 
struct RGBType
{
    double r,g,b;
};
 
void savebmp (const char *filename, int w,int h,int dpi, RGBType *data)
{
    FILE *f;
    int k = w*h;
    int s = 4*k;
    int filesize = 54 + s;
 
    double factor = 39.375;
    int m = static_cast<int>(factor);
 
    int ppm = dpi*m;
 
    unsigned char bmpfileheader[14] = {'B','M', 0,0,0,0,  0,0,0,0,  54,0,0,0};
    unsigned char bmpinfoheader[40] = {40,0,0,0,  0,0,0,0, 0,0,0,0,  1,0,24,0};
 
    bmpfileheader[2] = (unsigned char)(filesize);
    bmpfileheader[3] = (unsigned char)(filesize>>8);
    bmpfileheader[4] = (unsigned char)(filesize>>16);
    bmpfileheader[5] = (unsigned char)(filesize>>24);
 
    bmpinfoheader[4] = (unsigned char)(w);
    bmpinfoheader[5] = (unsigned char)(w>>8);
    bmpinfoheader[6] = (unsigned char)(w>>16);
    bmpinfoheader[7] = (unsigned char)(w>>24);
 
    bmpinfoheader[8] = (unsigned char)(h);
    bmpinfoheader[9] = (unsigned char)(h>>8);
    bmpinfoheader[10] = (unsigned char)(h>>16);
    bmpinfoheader[11] = (unsigned char)(h>>24);
 
    bmpinfoheader[21] = (unsigned char)(s);
    bmpinfoheader[22] = (unsigned char)(s>>8);
    bmpinfoheader[23] = (unsigned char)(s>>16);
    bmpinfoheader[24] = (unsigned char)(s>>24);
 
    bmpinfoheader[25] = (unsigned char)(ppm);
    bmpinfoheader[26] = (unsigned char)(ppm>>8);
    bmpinfoheader[27] = (unsigned char)(ppm>>16);
    bmpinfoheader[28] = (unsigned char)(ppm>>24);
 
    bmpinfoheader[29] = (unsigned char)(ppm);
    bmpinfoheader[30] = (unsigned char)(ppm>>8);
    bmpinfoheader[31] = (unsigned char)(ppm>>16);
    bmpinfoheader[32] = (unsigned char)(ppm>>24);
 
    f = fopen(filename,"wb");
 
    fwrite(bmpfileheader,1,14,f);
    fwrite(bmpinfoheader,1,40,f);
 
    for (int i=0; i < k; i++)
    {
        RGBType rgb = data[i];
 
        double red =(data[i].r)*255;
        double green =(data[i].g)*255;
        double blue =(data[i].b)*255;
 
        unsigned char color[3] = {(int)floor(blue),(int)floor(green),(int)floor(red)};
 
        fwrite(color,1,3,f);
    }
 
    fclose(f);
}
 
 
int thisone;
 
int main(int argc, char *argv[]) 
{
    cout<<"rendering ..."<<endl;
    
    int dpi = 72;
    int width = 640;
    int height = 480;
    int n = width*height;
 
    RGBType *pixels = new RGBType[n];
    
    for (int x=0; x < width; x++) 
    {
        for (int y=0; y < height; y++) 
        {
            thisone = y*width + x;
 
            if((x > 200 && x < 440) && (y > 200 && y < 280))
            {
            pixels[thisone].r = 23;
            pixels[thisone].g = 222;
            pixels[thisone].b = 10;
            }
            else
            {
            pixels[thisone].r = 0;
            pixels[thisone].g = 0;
            pixels[thisone].b = 0;
            }
        }
    }
    savebmp("scence.bmp",width,height,dpi,pixels);
    return 0;
}
И есть такой код, сохраняющий точку на черном фоне в png
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
#include <png.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <setjmp.h>
 
#define IMAGE_WIDTH     320
#define IMAGE_HEIGHT    240
#define IMAGE_BPP       1
 
png_structp png_ptr;
png_infop info_ptr;
 
png_bytepp rows;
 
void png_setpixel(int x,int y,int rgbcolor,png_bytepp dest)
{
    dest[y][x*3] = (rgbcolor>>16)&0xFF;
    dest[y][x*3+1] = (rgbcolor>>8)&0xFF;
    dest[y][x*3+2] = rgbcolor&0xFF;
}
 
void create_image()
{
    int i;
    rows=(png_bytepp)malloc(sizeof(png_bytep)*IMAGE_HEIGHT);
    if(rows==NULL){
        perror("malloc (rows)");
        exit(1);
    }
    for(i=0; i<IMAGE_HEIGHT; i++){
        rows[i]=(png_bytep)malloc(sizeof(png_byte)*IMAGE_WIDTH*IMAGE_BPP*3);
        if(rows[i]==NULL){
            perror("malloc (rows[i])");
            exit(1);
        }
        memset(rows[i],0x0,sizeof(png_byte)*IMAGE_WIDTH*IMAGE_BPP*3);
    }
    png_setpixel(130,80,0xFF00FF,rows);
}
 
int main()
{
    FILE *fp = fopen("out.png","wb");
    if(!fp){
        perror("fopen");
        return 1;
    }
    /* Create write structure */
    png_ptr = png_create_write_struct(
        PNG_LIBPNG_VER_STRING, NULL, NULL,NULL
    );
    if(!png_ptr){
        fprintf(stderr,"create_write_struct failed\n");
        return 1;
    }
    /* Create info structure */
    info_ptr = png_create_info_struct(png_ptr);
    if (!info_ptr){
        png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
        return 1;
    }
    /* Initialize I/O routines */
    png_init_io(png_ptr, fp);
    /* Set filters */
    png_set_filter(png_ptr, 0, PNG_FILTER_NONE);
    /* Set image information */
    png_set_IHDR(png_ptr, info_ptr, 320, 240,
        8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
        PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
    /* Create image */
    create_image();
    png_set_rows(png_ptr,info_ptr,rows);
    /* And finally, write png file */
    png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
    fclose(fp);
    return 0;
}
Надо, что бы квадрат из первого кода сохранялся не в bmp, а в png. Я не осилил, помогите ОЧЕНЬ НАДО.

Добавлено через 1 час 43 минуты
up up
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru