baza danych tekstur

baza danych tekstur
wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 702
0

gdzie jest błąd bo jak tworzy plik basetexture.dat to plik jest wypełniony tymi samymi danymi na poglądzie tzn view'erem czy też notatnikiem

Kopiuj
// ConsoleApplication3.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "MyStringC++11.h"

#define BITMAP_ID 0x4D42
using namespace std;
#pragma warning(disable : 4996)

unsigned char* LoadBitmapFile(
	char* filename, int& w, int& h,
	BITMAPINFOHEADER* bitmapInfoHeader)
{
	FILE* filePtr;

	BITMAPFILEHEADER bitmapFileHeader;

	unsigned char* bitmapImage;


	filePtr = fopen(filename, "rb");

	if (!filePtr)
		return NULL;


	fread(
		&bitmapFileHeader,
		sizeof(BITMAPFILEHEADER),
		1,
		filePtr);


	if (bitmapFileHeader.bfType != 0x4D42)
	{
		fclose(filePtr);
		return NULL;
	}


	fread(
		bitmapInfoHeader,
		sizeof(BITMAPINFOHEADER),
		1,
		filePtr);


	if (bitmapInfoHeader->biBitCount != 24)
	{
		fclose(filePtr);
		return NULL;
	}


	fseek(
		filePtr,
		bitmapFileHeader.bfOffBits,
		SEEK_SET);


	DWORD imageSize =
		bitmapInfoHeader->biSizeImage;


	if (imageSize == 0)
	{
		int rowSize =
			((bitmapInfoHeader->biWidth * 3 + 3) & ~3);

		imageSize =
			rowSize *
			abs(bitmapInfoHeader->biHeight);
	}


	bitmapImage =
		(unsigned char*)malloc(imageSize);


	if (!bitmapImage)
	{
		fclose(filePtr);
		return NULL;
	}


	fread(
		bitmapImage,
		1,
		imageSize,
		filePtr);


	fclose(filePtr);

	w = bitmapInfoHeader->biWidth;
	h = bitmapInfoHeader->biHeight;
	return bitmapImage;
}



class Texture
{
public:
	unsigned char* data_image;
	int w, h;
	unsigned int idtexture;
	void SetIdTexure(int id)
	{
		idtexture = id;
	}
	void SetTexture(int x, int y, unsigned char* data)
	{
		w = x;
		h = y;
		data_image = new unsigned char[w * h * 3];
		data_image = data;
	}
	void Free()
	{
		w = 0;
		h = 0;
		
		idtexture = 0;
		delete []data_image;
		
	}

};
Texture index[1000];
class TextureBase
{
public:

	TextureBase();
	~TextureBase();
	int total;

	void AddTexture(char* filename)
	{
		int w, h;
		BITMAPINFOHEADER	bitmapInfoHeader;
		unsigned char* bdata = LoadBitmapFile(filename, w, h, &bitmapInfoHeader);
		index[total].SetTexture(w, h, bdata);
		total += 1;
		delete bdata;
	}
	void unLoad()
	{
		for (int i = 0; i < total; i += 1)
			index[i].Free();
		total = 0;
	}
	bool LoadFile(char* filename)
	{
		FILE* file;
		file = fopen(filename, "rb");
		int w, h;
		char id0;
		char id1;
		char id2;
		fread(&id0, sizeof(id0), 1, file);
		fread(&id1, sizeof(id1), 1, file);
		fread(&id2, sizeof(id2), 1, file);
		if (id0 == 'M' && id1 == 'D' && id2 == 'G')
		{

			fread(&total, sizeof(total), 1, file);
			for (int i = 0; i < total; i += 1)
			{
				fread(&w, sizeof(w), 1, file);
				fread(&h, sizeof(h), 1, file);
				unsigned char* data = new unsigned char[w * h * 3];
				fread(data, sizeof(unsigned char), w * h * 3, file);

				index[i].SetTexture(w, h, data);
				delete data;
			}
			fclose(file);
			return true;
		}
		else
		{
			fclose(file);
			return false;
		}

	}

	void SaveToFile(char* filename)
	{
		FILE* file;
		file = fopen(filename, "wb");
		char id0 = 'M';
		char id1 = 'D';
		char id2 = 'G';
		fwrite(&id0, 1, 1, file);
		fwrite(&id1, 1, 1, file);
		fwrite(&id2, 1, 1, file);

		fwrite(&total, 4, 1, file);
		for (int i = 0; i < total; i += 1)
		{
			fwrite(&index[i].w, 4, 1, file);
			fwrite(&index[i].h, 4, 1, file);
			int s = index[i].w * index[i].h * 3;
			fwrite(index[i].data_image, 1, s, file);

		}
		fclose(file);
	}
};
TextureBase::TextureBase()
{
	total = 0;
}
TextureBase::~TextureBase()
{
}

MyString file_list[100];
int t = 0;
void GetListFile(char* path, char* ext)
{
	MyString lpFile;
	lpFile.Add(path);
	lpFile.Add((char*)"*.");

	lpFile.Add(ext);

	WIN32_FIND_DATA wfd;
	HANDLE h = FindFirstFile((LPCSTR)lpFile.GetData(), &wfd);
	if (wfd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
	{
		file_list[t].Add(path);
		file_list[t].Add(wfd.cFileName);
		cout << file_list[t].GetData() << endl;
		t += 1;
	}
	while (FindNextFile(h, &wfd) != 0)
	{
		if (wfd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
		{
			file_list[t].Add(path);
			file_list[t].Add(wfd.cFileName);
			cout << file_list[t].GetData() << endl;
			t += 1;
		}
	}
	FindClose(h);
}


int main(int argc, char* argv[])
{

	cout << "LISTA PLIKOW DO BAZY:" << endl;

	GetListFile((char*)"gfx/", (char*)"bmp");
	TextureBase tb;

	for (int i = 0; i < t; i += 1)
	{
		tb.AddTexture(file_list[i].GetData());
	}

	tb.SaveToFile((char*)"basetexture.dat");


	cout << "BAZA ZAPISANA!" << endl;
	system("pause");

	return 0;
}


// Porady dotyczące rozpoczynania pracy:
//   1. Użyj okna Eksploratora rozwiązań, aby dodać pliki i zarządzać nimi
//   2. Użyj okna programu Team Explorer, aby nawiązać połączenie z kontrolą źródła
//   3. Użyj okna Dane wyjściowe, aby sprawdzić dane wyjściowe kompilacji i inne komunikaty
//   4. Użyj okna Lista błędów, aby zobaczyć błędy
//   5. Wybierz pozycję Projekt > Dodaj nowy element, aby utworzyć nowe pliki kodu, lub wybierz pozycję Projekt > Dodaj istniejący element, aby dodać istniejące pliku kodu do projektu
//   6. Aby w przyszłości ponownie otworzyć ten projekt, przejdź do pozycji Plik > Otwórz > Projekt i wybierz plik sln

wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 702
1

już mi działa :D nie wiem jak to możliwe ale dobrze zapisuje baze teraz to dziwne

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.