Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
#1

Получение инфы. из файла с изображением - C++

16.10.2012, 21:43. Просмотров 375. Ответов 6
Метки нет (Все метки)

Здравствуйте,ув. форумчане=)
Помогите пожалуйста)
Нужно получить некоторые данные из файла формата bmp а именно ширину,высоту,и глубину(бит на пиксель)
зная структуру бмп - http://c-site.h1.ru/infa/bmp_struct.htm
пишу вот код:
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
#include <cstdlib>
#include <stdio.h>
#include <conio.h>
 
 
FILE *f;
unsigned long SIZE,width,height;
    unsigned int depth;
int KOD;
 
int main ()
{
 
    if ((f = fopen("1.bmp", "rb"))==NULL) 
  printf("He удается открыть файл.\n");
        
        fseek(f, 2L, SEEK_SET); 
    fread(&SIZE,sizeof(long),1,f);
    
        fseek(f, 18L, SEEK_SET); 
    fread(&width,sizeof(long),1,f);
 
 
    fseek(f, 22L, SEEK_SET); 
    fread(&height,sizeof(long),1,f);
 
    fseek(f, 28L, SEEK_SET); 
    fread(&depth,sizeof(int),1,f);
 
printf("depth - %i \n",&depth);
printf("width - %d \n",&width);
printf("height - %d \n",&height);
printf("size - %d \n",&SIZE);
getch();
return 0;
 
}
но постоянно выводятся явно не те числа и всё время разные....что я не так написал?...чую дело точно замешано в printf а именно со всякими %i и %d
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2012, 21:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Получение инфы. из файла с изображением (C++):

Удаление инфы из дискового файла - C++
Есть файл. Этот файл читается и пишется как типизированный (подозреваю, что к делу это не относится), то есть в качестве указателя на буфер...

ошибка в выводе инфы из файла - C++
Почему выводит две строчки (одну не существующую) ЗЫ Чет с поиском не врубаюсь...как сделать так что если (по условию) два абонента, то...

Ошибка, при считывании инфы с файла... - C++
Вот есть код:#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;fstream.h&gt; #include &lt;stdio.h&gt; #include...

Почему при записи новой инфы из файла стирается старая? - C++
Делаю так ofstream save(&quot;Save\\Save.txt&quot;); save&lt;&lt;name; save.close();

Получение атрибутов файла (а именно дату создания файла) без WinApi - C++
Здравствуйте, есть задача &quot;получить дату создания файла&quot;, как это реализовать без WinApi с использованием консольного приложения на...

Получение данных из файла - C++
Задача№6. Постройте программу, которая отслеживает пожертвования в Общество Защиты Влиятельных Лиц. Она должна запрашивать у пользователя...

6
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
16.10.2012, 21:45 #2
C++
1
2
unsigned long SIZE,width,height;
    unsigned int depth;
попробуйте использовать тип int
0
Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
16.10.2012, 21:53  [ТС] #3
так как же,long же 4 байта,а данные там как раз по 4 байта
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
16.10.2012, 22:08 #4
Недавно делал, разбирайтесь
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
int main(){
    setlocale(LC_CTYPE, "Rus");
 
    FILE * pFile;
    UI BMP_Width=0; 
    UI BMP_Height=0;
    UI BMP_Start=0;
 
    pFile=fopen("noshipshot.bmp","rb");
    
    if(!pFile){
        printf("pFile = NULL");
        return 0;
    }
 
    fseek(pFile,10,SEEK_SET);
    fread(&BMP_Start,4,1,pFile);
    fseek(pFile,18,SEEK_SET);
    fread(&BMP_Width,4,1,pFile);
    fread(&BMP_Height,4,1,pFile);
    printf("Указатель на фаил: 0x%p\nСмещение до картинки: %d\nШирина картинки: %d\nВысота картинки: %d\n",pFile,BMP_Start,BMP_Width,BMP_Height);
 
 
    fclose(pFile);
    return 0;
}
0
alexcoder
1549 / 694 / 93
Регистрация: 03.06.2009
Сообщений: 3,710
Завершенные тесты: 1
16.10.2012, 22:09 #5
C
1
2
3
4
printf("depth - %i \n",depth);
printf("width - %d \n",width);
printf("height - %d \n",height);
printf("size - %d \n",SIZE);
не нужно брать адреса при выводе.
К тому же придется поэкспериментировать с depth. В BMP это 16-битное значение, а вот тип int может быть 16-битным и 32-битным в зависимости от компилятора.

Р.Ы. Пока чухался, уже не актуально
1
Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
17.10.2012, 13:38  [ТС] #6
Актуально актуально!)
Такая дурацкая очепятка(((
Исправил,всё правильно показал)

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Недавно делал, разбирайтесь
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
int main(){
    setlocale(LC_CTYPE, "Rus");
 
    FILE * pFile;
    UI BMP_Width=0; 
    UI BMP_Height=0;
    UI BMP_Start=0;
 
    pFile=fopen("noshipshot.bmp","rb");
    
    if(!pFile){
        printf("pFile = NULL");
        return 0;
    }
 
    fseek(pFile,10,SEEK_SET);
    fread(&BMP_Start,4,1,pFile);
    fseek(pFile,18,SEEK_SET);
    fread(&BMP_Width,4,1,pFile);
    fread(&BMP_Height,4,1,pFile);
    printf("Указатель на фаил: 0x%p\nСмещение до картинки: %d\nШирина картинки: %d\nВысота картинки: %d\n",pFile,BMP_Start,BMP_Width,BMP_Height);
 
 
    fclose(pFile);
    return 0;
}
Вот вопрос по
C++
1
2
3
fseek(pFile,18,SEEK_SET);
    fread(&BMP_Width,4,1,pFile);
    fread(&BMP_Height,4,1,pFile);
после width не передвинули курсор...То есть после fread курсор так же передвигается и сохраняет положение?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
17.10.2012, 13:45 #7
Цитата Сообщение от Justix Посмотреть сообщение
после width не передвинули курсор...То есть после fread курсор так же передвигается и сохраняет положение?
Да, курсор сам переезжает
0
17.10.2012, 13:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2012, 13:45
Привет! Вот еще темы с ответами:

Получение последней строки из файла - C++
Вообщем прощу помощи, мне нужно получить последнюю строку из текстового файла и запихнуть ее в string. Желательно не перебирая весь файл,...

Получение информации из бинарного файла - C++
Собственно есть такая ситуация. Есть программа DatEdit. Принцип её работы в следующем. Мы скармливаем ему структуру и загружаем dat файл....

Получение данных из файла в Спортивном программировании - C++
Здавствуйте! Решая задачи по спортивному программированию, столкнулся с тем, что в 95% нужно использовать чтение из файла. Допусти...

FindFirstFile -получение корректного имени файла - C++
Всем доброго времени суток.Возникает ошибка при поиске файлов FindFirstFile.Нужно добавить все имена файлов с путем в массив для...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.