Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

куда делись байты?

81K
20 марта 2012 года
Dtctkrjd
1 / / 20.03.2012
задание:
Считать изображение(bmp) в матрицу для которой должна быть выделена память, записать эту матрицу в бинарный файл. Затем считать это изображение в одномерный массив которому выделена память, записать эту матрицу в бинарный файл.
Все работает, но проблема в том что когда работаю с image.bmp все нормально, разница между оригиналом и создаваемыми файлами 54 байта, а когда с 123.bmp 74 байта.(файлы приложены)
Я не понимаю куда деваются 20 байт.

Код:
#include <stdio.h>
#include <stdlib.h>
 
void Read_one(int a,int b,int c);
void Write_one(int a,int b,int c);
void Read_two(int a,int b,int c);
void Write_two(int a,int b,int c);
 
FILE *f;
int i,j;
int **p,*m;
 
void Read_one(int a,int b,int c)
{
    f=fopen("image.bmp","rb");
    fseek(f,54,SEEK_SET);
    m=calloc(a*b*c/8,sizeof(int));
    for(i=0;i<a*b*c/8;i++)
    {
        fread(&m,1,1,f);
    }
    fclose(f);
}
void Write_one(int a,int b,int c)
{
    f=fopen("1","wb");
    for(i=0;i<a*b*c/8;i++)
    {
        fwrite(&m,1,1,f);
    }
    fclose(f);
}
void Read_two(int a,int b,int c)
{
    f=fopen("image.bmp","rb");
    fseek(f,54,SEEK_SET);
    p=calloc(a,sizeof(int));
    for(i=0;i<a;i++)
    {
        p=calloc(b*c/8,sizeof(int));
    }
    for(i=0;i<a;i++)
    {
        for(j=0;j<b*c/8;j++)
        {
            fread(&p[j],1,1,f);
        }
    }
    fclose(f);
}
void Write_two(int a,int b,int c)
{
    f=fopen("2","wb");
    for(i=0;i<a;i++)
    {
        for(j=0;j<b*c/8;j++)
        {
            fwrite(&p[j],1,1,f);
        }
    }
    fclose(f);
}
int main(void)
{
    int height,width,bit;
    f=fopen("image.bmp","rb");
    fseek(f,18,SEEK_SET);
    fread(&width,4,1,f);
    fread(&height,4,1,f);
    fseek(f,28,SEEK_SET);
    fread(&bit,4,1,f);
    fclose(f);
    Read_one(height,width,bit);
    Write_one(height,width,bit);
    Read_two(height,width,bit);
    Write_two(height,width,bit);
    return 0;
}
Прикрепленные файлы:
713
Загрузок: 596
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог