куда делись байты?
Считать изображение(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;
}
#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;
}