140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
1

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

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

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

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

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

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

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

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

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

Не по теме:

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


#include <windows.h> что ни будь можно с этим сделать?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.01.2014, 20:39 4
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
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
11.01.2014, 20:39 5
LoadImage function
CreateBitmap function
1
KOPOJI
11.01.2014, 20:40
  #6

Не по теме:

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

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

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

Добавлено через 2 минуты
что то не могу с винапи разобраться...
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
11.01.2014, 21:57 8
http://www.boost.org/doc/libs/... index.html
1
11.01.2014, 21:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2014, 21:57
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru