Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: this_one   (16.02.2007 в 21:46)
Пишу CGI-script на Си в среде MS VC .NET 2003, использую Денвер 2.0

Суть скрипта:
- читаем картинку из файла
- выводим в stdout заголовок MIME, мол выводим картинку
- передаем в stdout картинку без изменений (файл без изменений)

В результате в браузерах FF 2, Opera 9, IE 6
для 16 и 256 цветных картинок:
картинка вида
.........|
.........|
.........|
------------------
.........|
.........|
.........|
превращается в

.............. /
............../
............./
------------------
.........../
........../
........./

(точек нет, просто иначе стираются пробелы)

При этом в браузере картинка имеет верные значения высоты и ширины, но становится больше на !!!"число строк в изображении"!!! байт. Для 24-битных картинок искажения не происходит. Проверял с помощью Total Commander характер несовпадения файлов передаваемого и того что в браузере "образовалось" (использовал "сохранить как", чтобы получить из картинки в браузере файл для сравнения) - закономерностей в различиях (а они есть) файлов не выявил.

Код на Си:


//определение размера файла
int file_size(char* InpFN)
{
FILE *tmp = fopen(InpFN, "r");
if (tmp == NULL)
return -1;
fseek(tmp, 0L, SEEK_END);
int flen = ftell(tmp);
fclose(tmp);
return flen;
}




void main(void)
{
//выделение памяти под картинку
int fsize = file_size("image.bmp");
char *image = (char *) malloc (fsize);
//чтение картинки в ОЗУ
FILE *fin = fopen("image.bmp","rb");
fread(image, fsize, 1, fin);
fclose(fin);
//проверка правильности чтения файла с картинкой
FILE *fout = fopen("image_out.bmp","wb");
fwrite(image, fsize, 1, fout);
fclose(fout);

//передача браузеру картинки
printf("Content-type: image/bmp\n\n");
fwrite(image, fsize, 1, stdout);
free(image);
//проверка правильности определения размера картинки в байтах
FILE *flog = fopen("log.txt","w");
fprintf(flog, "fsize = %d", fsize);
fclose(flog);
}


Программа в данном виде - начальный этап, просто хочу научиться передавать изображение с помощью cgi скрипта на си, чтобы браузер его правильно отображал, ан здесь уже начались проблемы.
Конечная цель - написание на Си CAPTCHAи.


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: