Endlich BMP in der Konsole.

worstcase

Grünschnabel
Endlich geschafft nachdem wir an der techniker uns wieder mit einem projekt beschäftigen MySql und C++ habe ich mich nochmals an eine Funktion gewagt die in meinem ersten Projekt nie funktioniert hat. Und endlich läuft es, ich kann BMP Datein einlesen und in der Konsole anzeigen lasse.

Gruß
Thorsten

Code:
#include <fstream>
#include <iostream>
#include <windows.h>
#include <string>

using namespace std;

void loadbmp(HDC fenster, int sizex, int sizey, int posx, int posy, char* datei);
void warten();
void cls();
int main()
{
	
	HWND hWnd=FindWindow("ConsoleWindowClass", NULL);
	HDC hDC=GetDC(hWnd);

	loadbmp(hDC,100,100,20,20,"test1.bmp");
	cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
	warten();
	cls();

	loadbmp(hDC,100,100,20,20,"test2.bmp");
	cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
	warten();
	cls();

	loadbmp(hDC,200,200,20,20,"test3.bmp");
	cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
	warten();
	cls();

	loadbmp(hDC,200,200,20,20,"test4.bmp");
	cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
	warten();
	cls();

	loadbmp(hDC,200,200,20,20,"test5.bmp");
	cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
	warten();
	cls();

	loadbmp(hDC,240,240,20,20,"test6.bmp");
	cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
	warten();
	cls();





	return 0;

}

void loadbmp(HDC fenster, int sizex, int sizey, int posx, int posy, char* datei)
{
	
	unsigned char readpixel;
	
	int x=sizex,y=0;
	int pixsize=sizex*sizey*3+54;
	int *pixel;
	
	pixel = new int[pixsize];
	
	ifstream in(datei, ios::in|ios::binary);
	
	for (int i=0;i<=pixsize;++i)
	{
		readpixel=in.get();
		pixel[i]=readpixel;
	}
	
	in.close();

	for (int p=pixsize;pixsize!=54;pixsize=pixsize-3)
	{
		
		SetPixel(fenster,x+posx,y+posy,RGB(pixel[pixsize-1],pixel[pixsize-2],pixel[pixsize-3]));
					
		x=x-1;
		
		if(x<=0)
		{
			y=y+1;
			x=sizex;
		}
	}
}


void warten()
{
  cout << "\n\nPress \"ENTER\" to continue";
	fflush(stdin);
	getchar();
}

void cls()
{
		system("CLS");
}
 
Das geht? Es dürfte eigentlich nicht funktionieren, da eine BMP Datei einen Header hat und du einfach drauflos liest. Außerdem ist es nicht optimal eine Datei jedesmal neu laden zu müssen, wenn man sie anzeigen will.
 
Jepp das geht, nur nicht mehr bei kleinen Dateien (50*50), Irgendwie scheint hier der Aufbau anders zu sein. Der Header ist kein Problem und wird einfach bei der Ausgabe übersprungen.

for (int p=pixsize;pixsize!=54;pixsize=pixsize-3) // 54 Byte Header muss wech. :)

Das ganze Projekt wird mit SQL verknüpft und das würde bedeuten das ich einige Bilder vorladen müsste was alles Speicher kostet. Wenn mir SQL nach einer Anfrage den Dateinamen liefert lade ich einfach die benötigte Datei, das kostet nicht wirklich viel Zeit.

Gruß
Thorsten
 
Zurück