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

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

Восстановить пароль Регистрация
 
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
16.10.2012, 21:43     Получение инфы. из файла с изображением #1
Здравствуйте,ув. форумчане=)
Помогите пожалуйста)
Нужно получить некоторые данные из файла формата 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
16.10.2012, 21:45     Получение инфы. из файла с изображением #2
C++
1
2
unsigned long SIZE,width,height;
    unsigned int depth;
попробуйте использовать тип int
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
16.10.2012, 21:53  [ТС]     Получение инфы. из файла с изображением #3
так как же,long же 4 байта,а данные там как раз по 4 байта
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 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;
}
alexcoder
1438 / 652 / 86
Регистрация: 03.06.2009
Сообщений: 3,295
Завершенные тесты: 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-битным в зависимости от компилятора.

Р.Ы. Пока чухался, уже не актуально
Justix
 Аватар для 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 курсор так же передвигается и сохраняет положение?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2012, 13:45     Получение инфы. из файла с изображением
Еще ссылки по теме:

Получение данных из файла C++
Получение данных из файла в Спортивном программировании C++
C++ Получение информации из бинарного файла

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
17.10.2012, 13:45     Получение инфы. из файла с изображением #7
Цитата Сообщение от Justix Посмотреть сообщение
после width не передвинули курсор...То есть после fread курсор так же передвигается и сохраняет положение?
Да, курсор сам переезжает
Yandex
Объявления
17.10.2012, 13:45     Получение инфы. из файла с изображением
Ответ Создать тему
Опции темы

Текущее время: 08:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru