Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для MihaniX
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4

Как создать картинку, для хранения информации в пикселях

11.01.2014, 20:28. Показов 1914. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как создать картинку? Я хочу хранить в пикселях информацию.
Видел код на дельфи
Delphi
1
2
p:=TBitmap.Create;
     p.LoadFromFile(ExtractFilePath(Application.ExeName)+'\res\'+ neuro_web[i].name+'.bmp')
а как на с++ это сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2014, 20:28
Ответы с готовыми решениями:

Как создать базу данных для хранения информации?
У меня вопрос как создать базу данный для хранения информации например биографию о ком ни будь и все такое как создать помогите!!!!!???...

Создать запись для хранения следующей информации:
1. Создать запись для хранения следующей информации: – код владельца, – номер автомобиля, – марка автомобиля, – дата выпуска, –...

Создать базу данных для хранения информации
1. Создать базу данных для хранения следующей информации: – номер билета, – номер рейса, – цена, – дата продажи, – фамилия...

7
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.01.2014, 20:32
Например, с помощью библиотеки gd. На плюсах изображения не генерировал, но на си писал подобный код

Добавлено через 52 секунды
http://habrahabr.ru/post/52775/
1
 Аватар для MihaniX
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
11.01.2014, 20:33  [ТС]

Не по теме:

опять библиотеки...


#include <windows.h> что ни будь можно с этим сделать?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.01.2014, 20:39
MihaniX, я не под винду писал..
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <gd.h>
 
#define BITMAP_CHAR "*"
#define BACK_GROUND_CHAR "_"
#define NEW_LINE "\n"
#define DEPTH_PERCENT 90
 
#define MAX_FILENAME_SIZE 50
#define MAX_BUFFER_SIZE 128
 
 
typedef struct
{
    size_t red;
    size_t green;
    size_t blue;
    size_t alpha;
} Colors_t;
 
 
size_t drawText(const char *);
 
unsigned short checkImageType(const char *);
 
size_t putData(const char *, char *, char *);
 
unsigned short showError(const char *);
 
 
gdImagePtr createImage(const char *, FILE *);
 
size_t imageColorAt(gdImagePtr, int, int);
 
Colors_t imageColorsForIndex(gdImagePtr, size_t);
 
 
int main(void)
{
    //число записанных байт
    size_t bytes = 0;
 
    //имя файла
    char filename[MAX_FILENAME_SIZE];
 
    //выход из программы
    const char *exitcmd = "quit";
 
 
    while(1)
    {
        printf("\nEnter filename or quit to exit..\n");
 
        //читаем имя файла
        fgets(filename, MAX_FILENAME_SIZE, stdin);
        sscanf(filename, "%s", filename);
 
        //если ввели quit - выходим из программы
        if( ! strcmp(filename, exitcmd) )
            break;
 
        //пробуем прочитать и записать
        bytes = drawText(filename);
        printf("%s Записано %ld байт\n",  (bytes ? "Успешно!" : "Ошибка."), bytes) ;
    }
 
    printf("\nGood bye..\n");
    getchar();
 
    return 0;
}
 
 
 
/*
 * функция для записи данных
 * проверяет, является ли имя файла возможным типом
 * 
 * @param char *filename    Имя файла для проверки и открытия
 * 
 * @return size_t bytes     Число записанных байт или 0 в случае ошибки
 */
size_t drawText(const char *filename)
{
 
    FILE *in;
 
    gdImagePtr res; //для ресурса открытого изображения GD
 
    int srcWidth = 0, srcHeight = 0; //ширина и высота исходного изображения
    int dstWidth = 0, dstHeight = 0; //ширина и высота выходного изображения
 
    //переменные для цикла
    int x = 0;
    int y = 0;
 
    size_t color_index; //индекс цвета
    size_t bytes; //число записанных байт
 
    Colors_t color; //структура цвета (reg, green, blue, alpha)
 
    //буфер для записи данных в файл
    char *buffer = (char *) malloc(sizeof(char *) * MAX_BUFFER_SIZE);
 
    //если не получилось выделить память - выводим ошибку и выходим из функции
    if(!buffer)
        return showError("Не удалось выделить память");
 
    //если неверный тип файла - выводим ошибку и выходим из функции
    if(!checkImageType(filename))
        return showError("Неверное имя файла");
 
    //если не удалось открыть файл - выводим ошибку и выходим из функции
    if ( !(in = fopen(filename, "rb")) )
        return showError("Не удалось открыть файл");
 
    //если не получилось создать изображение - выводим ошибку и выходим из функции
    if( !(res = createImage(filename, in)) )
        return showError("Ошибка создания изображения");
 
    //узнаем исходную ширину и высоту изображения
    srcWidth = gdImageSX(res);
    srcHeight = gdImageSY(res);
 
    // Новая ширина изображения
    dstWidth = (int)( srcWidth / (srcHeight / 20) );
    // Новая высота изображения
    dstHeight = 20;
 
    //создаем пустое изображение
    gdImagePtr out = gdImageCreateTrueColor(dstWidth, dstHeight);
 
    //копируем изображение, подгоняя под нужный размер
    gdImageCopyResampled(out, res, 0, 0, 0, 0, dstWidth, dstHeight, srcWidth, srcHeight);
 
    *buffer = '\0';
    // Проходим по всем пикселам изображений
    for(y = 0; y < dstHeight; y++)
    {
        for(x = 0; x < dstWidth; x++)
        {
            //получаем код цвета пиксела                
            color_index = imageColorAt(out, x, y);
            //переводим в RGB формат по коду цвета пиксела
            color = imageColorsForIndex(out, color_index);
            // Выбор между тонами
            buffer = strcat( buffer, (color.blue < 2.55 * DEPTH_PERCENT ? BITMAP_CHAR : BACK_GROUND_CHAR) );
        }
        // Дополняем вывод переводом строки
        buffer = strcat(buffer, NEW_LINE);
    }
 
    //освобождаем память, выделенную под изображения
    gdImageDestroy(out);
    gdImageDestroy(res);
 
    //закрываем файл
    fclose(in);
 
    //пробуем записать данные в файл
    bytes = putData(filename, "txt", buffer);
 
    //освобождаем выделенную память
    free(buffer);
 
    //возвращаем число записанных байт
    return bytes;
}
 
 
/*
 * Функция для записи данных в файл
 * 
 * @param const char *filename  Имя файла для записи
 * @param char *type        Тип файла для записи
 * @param char *data        Данные для записи
 * 
 * @return size_t bytes         Возвращает количество записанных байт или 0 в случае ошибки
 */
size_t putData(const char *filename, char *type, char *data)
{
    //число записанных байт
    size_t bytes = 0;
    //выделяем память под имя файла
    char tmp[ sizeof filename + sizeof type + 1 ];
 
    FILE *out;
 
    //составляем имя файла
    sprintf(tmp, "%s.%s", filename, type);
 
    //пробуем создать файл
    out = fopen(tmp, "wb");
    if(!out)
        return 0;
    //записываем данные
    bytes = fwrite( data, 1, strlen(data), out );
    //закрываем поток
    fclose(out);
    //возвращаем число записанных байт
    return bytes;
}
 
 
/*
 * Функция проверяет тип файла по переданному имени
 * 
 * @param const char *filename  Имя файла для проверки
 * 
 * @return unsigned short       Возвращает 0 в случае ошибки или 1 в случае успеха
 */
unsigned short checkImageType(const char *filename)
{
    //ищем последнее вхождение точки в имени файла
    const char *type = strrchr(filename, '.');
 
    //допустимые типы файлов
    const char *allowedTypes[] = {"jpeg","jpg","png","gif"};
 
    //счетчик
    int i = 0; 
 
    //вычисляем длину массива с допустимыми типами файлов
    int length = (int) sizeof allowedTypes / sizeof allowedTypes[0];
 
    //если в имени файла отсутствует точка - возвращаем ошибку (0)
    if(!type)
        return 0;
 
    type++;
 
    //если тип файла соответствующий - возвращаем 1, иначе возвращаем 0
    for(i = 0; i < length; i++)
        if(!strcmp(type, allowedTypes[i]))
            return 1;
    return 0;
}
 
 
/*
 * Функция создает изображение
 * 
 * @param const char *filename  Имя файла для создания изображения
 * @param FILE *image           Указатель на файл с изображением
 * 
 * @return gdImagePtr           Возвращает ресурс созданного изображения
 *                              или NULL в случае ошибки
 */
gdImagePtr createImage(const char *filename, FILE *image)
{
    //определяем тип файла
    const char *type = strrchr(filename, '.');
 
    if (!type)
        return NULL;
 
    type++;
 
    //проверяем тип файла и создаем соответствующее изображение
    if(!strcmp(type, "jpeg") || !strcmp(type, "jpg"))
        return gdImageCreateFromJpeg(image);
    if(!strcmp(type, "png"))
        return gdImageCreateFromPng(image);
    if( !strcmp(type, "gif"))
        return gdImageCreateFromGif(image);
    return NULL;
}
 
 
/*
 * @param gdImagePtr im Ресурс с изображением
 * @param int x         Отступ по оси Ox
 * @param int y         Отступ по оси Oy
 * 
 * @return size_t       Возвращает код цвета пиксела или 0 в случае ошибки
 */
size_t imageColorAt(gdImagePtr im, int x, int y)
{
    //если изображение полноцветовое
    if(im->tpixels && gdImageBoundsSafe(im, x, y))
    {
        //если изображение полноцветовое
        if(gdImageTrueColor(im))
            return gdImageTrueColorPixel(im, x, y);
        else
            return im->pixels[y][x];
    }
    return 0;
}
 
 
/*
 * Функция переводит в формат RGB цвет пиксела по коду пиксела
 * 
 * @param gdImagePtr im Ресурс созданного изображения
 * @param size_t col    Код цвета пиксела
 * 
 * @return Colors_t     Возвращает структуру с цветами в RGB
 */
Colors_t imageColorsForIndex(gdImagePtr im, size_t col)
{
    //структура для цвета в формате RGBA
    Colors_t color;
 
    //берем цвета в формате RGBA
    color.red       = gdImageRed(im, col);
    color.green     = gdImageGreen(im, col);
    color.blue      = gdImageBlue(im, col);
    color.alpha     = gdImageAlpha(im, col);
 
    return color;
}
 
 
/*
 * Функция выводит сообщение об ошибке
 * 
 * @param const char *msg   Текст сообщения об ошибке
 * 
 * @return unsigned short   Возвращает 0
 */
unsigned short showError(const char *msg)
{
    printf("\n%s\n", msg);
    return 0;
}
Вернее, даже, я практически не с нуля писал, а переписывал, поэтому некоторая "сумбурность" в коде..
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
11.01.2014, 20:39
LoadImage function
CreateBitmap function
1
11.01.2014, 20:40

Не по теме:

Цитата Сообщение от MihaniX Посмотреть сообщение
опять библиотеки...
Напишите свои, в чем проблема :)

0
 Аватар для MihaniX
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
11.01.2014, 21:01  [ТС]
Да с радостью! Только опыта бы по больше...

Добавлено через 16 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
А если я создаю эту картинку, мне основной код все равно писать в WinMain? Или нет?

Добавлено через 2 минуты
что то не могу с винапи разобраться...
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
11.01.2014, 21:57
http://www.boost.org/doc/libs/... index.html
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2014, 21:57
Помогаю со студенческими работами здесь

Создать запись для хранения следующей информации:
1. Создать запись для хранения следующей информации: – код владельца, – номер автомобиля, – марка автомобиля, – дата выпуска, ...

Создать запись для хранения следующей информации:
1. Создать запись для хранения следующей информации: – код владельца, – номер автомобиля, – марка автомобиля, – дата выпуска, ...

Создать базу данных для хранения информации об абитуриентах
Учет данных о поступающих в ВУЗ Создать базу данных для хранения информации об абитуриентах. Имеется список абитуриентов с полями: ФИО...

Создать структуру для хранения информации о матрице переменных размерностей
помогите, пожалуйста, разобраться с заданием создать структуру для хранения информации о матрице переменных размерностей Struct Matr { ...

Создать односвязный список для хранения информации о рабочих на предприятии
Помогите пожалуйста создать односвязный список для хранения информации о рабочих на предприятии (фамилия, имя, отчество, возраст, зарплата)...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru