Troche zmienilem temat :) nie wiem jak to inaczej nazwac :)
Program wczytuje plik bmp. Problem jest w tym ze
cout<<endl<<tablica2.size()
ta linijka powoduje ze program wywala smieci, gdy ja usuna albo skomentuje bajty kolorow sa odczytywane dobrze. Moze mi ktos powiedziec czemu tak sie dzieje?
#include<stdio.h>
#include<stdlib.h>
#include <iomanip.h>
#include<iostream.h>
#include<algorithm>
#include <vector.h>
int tmp;
struct FileHeader {
short bfType;
int bfSize;
short bfReserved1;
short bfReserved2;
short bfOffBits;
};
FileHeader File;
struct PictureHeader {
int biSize;
int biWidth;
int biHeight;
short biPlanes;
short biBitCount;
int biCompression;
int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
int biClrUsed;
int biClrImportant;
};
PictureHeader Picture;
int dlbfType;
int dlbfSize;
int dlbfReserved1;
int dlbfReserved2;
int dlbfOffBits;
int dlbiSize;
int dlbiWidth;
int dlbiHeight;
int dlbiPlanes;
int dlbiBitCount;
int dlbiCompression;
int dlbiSizeImage;
int dlbiXPelsPerMeter;
int dlbiYPelsPerMeter;
int dlbiClrUsed;
int dlbiClrImportant;
struct KoloryRGB {
int R;
int G;
int B;
};
KoloryRGB Rgb;
int c[8];
char dane;
int wielkosc_tablicy = Picture.biWidth*Picture.biHeight;
vector <int> tablica1(wielkosc_tablicy);
//int wielkosc_tablicy = Picture.biWidth*Picture.biHeight;
vector <int> tablica2(wielkosc_tablicy);
int main() {
FILE *f = fopen("plik1.bmp","rb");
system("cls");
printf("\n INFORMACJE O BITMAPIE\n\n");
fread(&File.bfType,sizeof(File.bfType),1,f);
dlbfType=sizeof(File.bfType);
cout<<" Typ:"<<hex<<File.bfType<<" dlugosc "<<dlbfType<<endl;
fread(&File.bfSize,sizeof(File.bfSize),1,f);
dlbfSize=sizeof(File.bfSize);
cout<<" Rozmiar pliku: "<<dec<<File.bfSize<<" bajtow"<<" dlugosc "<<dlbfSize<<endl;
fread(&File.bfReserved1,sizeof(File.bfReserved1),1,f);
dlbfReserved1=sizeof(File.bfReserved1);
cout<<" Zarezerwowane1: "<<File.bfReserved1<<" dlugosc "<<dlbfReserved1<<endl;
fread(&File.bfReserved2,sizeof(File.bfReserved2),1,f);
dlbfReserved2=sizeof(File.bfReserved2);
cout<<" Zarezerwowane2: "<<File.bfReserved2<<" dlugosc "<<dlbfReserved2<<endl;
fread(&File.bfOffBits,sizeof(File.bfOffBits),1,f);
dlbfOffBits=sizeof(File.bfOffBits);
cout<<" Pozycja danych obrazkowych: "<<File.bfOffBits<<" dlugosc "<<dlbfOffBits<<endl;
printf("\n");
fseek(f,14,SEEK_SET);
fread(&Picture.biSize,sizeof(Picture.biSize),1,f);
dlbiSize=sizeof(Picture.biSize);
cout<<" Wielkosc naglowka informacyjnego: "<<Picture.biSize<<" dlugosc "<<dlbiSize<<endl;
fread(&Picture.biWidth,sizeof(Picture.biWidth),1,f);
dlbiWidth=sizeof(Picture.biWidth);
cout<<" Szerokosc: "<<Picture.biWidth<<" pikseli dlugosc "<<dlbiWidth<<endl;
fread(&Picture.biHeight,sizeof(Picture.biHeight),1,f);
dlbiHeight=sizeof(Picture.biHeight);
cout<<" Wysokosc: "<<Picture.biHeight<<" pikseli dlugosc "<<dlbiHeight<<endl;
fread(&Picture.biPlanes,sizeof(Picture.biPlanes),1,f);
dlbiPlanes=sizeof(Picture.biPlanes);
cout<<" Liczba platow (zwykle 0): "<<Picture.biPlanes<<" dlugosc "<<dlbiPlanes<<endl;
fread(&Picture.biBitCount,sizeof(Picture.biBitCount),1,f);
dlbiBitCount=sizeof(Picture.biBitCount);
cout<<" Liczba bitow na piksel: "<<Picture.biBitCount<<" (1, 4, 8, or 24)"<<" dlugosc "<<dlbiBitCount<<endl;
fread(&Picture.biCompression,sizeof(Picture.biCompression),1,f);
dlbiCompression=sizeof(Picture.biCompression);
cout<<" Kompresja: "<<Picture.biCompression<<" (0=none, 1=RLE-8, 2=RLE-4)"<<" dlugosc "<<dlbiCompression<<endl;
fread(&Picture.biSizeImage,sizeof(Picture.biSizeImage),1,f);
dlbiSizeImage=sizeof(Picture.biSizeImage);
cout<<" Rozmiar samego rysunku: "<<Picture.biSizeImage<<" dlugosc "<<dlbiSizeImage<<endl;
fread(&Picture.biXPelsPerMeter,sizeof(Picture.biXPelsPerMeter),1,f);
dlbiXPelsPerMeter=sizeof(Picture.biXPelsPerMeter);
cout<<" Rozdzielczosc pozioma: "<<Picture.biXPelsPerMeter<<" dlugosc "<<dlbiXPelsPerMeter<<endl;
fread(&Picture.biYPelsPerMeter,sizeof(Picture.biYPelsPerMeter),1,f);
dlbiYPelsPerMeter=sizeof(Picture.biYPelsPerMeter);
cout<<" Rozdzielczosc pionowa: "<<Picture.biYPelsPerMeter<<" dlugosc "<<dlbiYPelsPerMeter<<endl;
fread(&Picture.biClrUsed,sizeof(Picture.biClrUsed),1,f);
dlbiClrUsed=sizeof(Picture.biClrUsed);
cout<<" Liczba kolorow w palecie: "<<Picture.biClrUsed<<" dlugosc "<<dlbiClrUsed<<endl;
fread(&Picture.biClrImportant,sizeof(Picture.biClrImportant),1,f);
dlbiClrImportant=sizeof(Picture.biClrImportant);
cout<<" Wazne kolory w palecie: "<<Picture.biClrImportant<<" dlugosc "<<dlbiClrImportant<<endl;
system ("pause");
//czyta dane obrazka
printf("\n\n Dane obrazka:\n\n");
fseek(f,File.bfOffBits,SEEK_SET);
//czyt. danych bitmapy
int bmpImg;
int j=0;
for (int i = File.bfOffBits; i < File.bfSize;i++) {
fseek(f,i,SEEK_SET);
fread(&bmpImg, 1, 1, f);
tablica1.push_back(bmpImg);
tablica2.push_back(bmpImg);
cout<<tablica2[j]<<endl;
j++;
}
cout<<tablica1.size();
cout<<endl<<tablica2.size();
fclose(f);
system("pause");
return 0;
}