Skocz do zawartości

[C++] Grafika w konsoli


Phoenix

Rekomendowane odpowiedzi

  • 4 tygodnie później...

W windowsowskiej konsoli się da wyświetlić JPG. Musisz wpierw zdobyć identyfikator okna twojej konsoli HWND (SetConsoleTitle a później FindWindow) a jak to będziesz miał to funkcje z GDI+ chyba potrafią JPG czytać, nie wiem GDI+ nigdy nie urzywałem ale tak mi się obiło o uszy gdzieś. Zwykłe GDI nie potrafi jpg-ów czytac!

Odnośnik do komentarza
Udostępnij na innych stronach

@UP: szybszy ;p

Ale konsola to konsola, a nie okno, wiec w zaden sposob rysowac po niej inaczej niz znakami ascii nie mozna

Odnośnik do komentarza
Udostępnij na innych stronach

Vardi: to sie mija z celem, bo moznaby od razu wtedy, nie bawiac sie w konsole, wywolac okno. tylko ze PhoenixPL nie chce sie bawic z oknami dlatego chce uzyc konsoli. wiec radze - od razu wez sie za okno, bo to az taka skomplikowana rzecz nie jest ;p

Odnośnik do komentarza
Udostępnij na innych stronach

wszystko w windowsie jest oknem(nawet okienko konsoli!!!) skoro tak... to można pobrać identyfikator okna i rysować po nim jak po normalnym oknie.

Za jakaś chwilke napisze kod rysujacy na konsoli bitmape... ale nie jpg bo nie mam czasu grzebac w GDI+

Odnośnik do komentarza
Udostępnij na innych stronach

Powodzenia, postawie piwo jak to zrobisz

Odnośnik do komentarza
Udostępnij na innych stronach

W katalogu programu musisz

wrzucić pliczek "obrazek.bmp"

no i tak jak ktoś wyżej pisał- lepszym rozwiązaniem jest nauczyć się okienek:)

 

// KonsolaBitmapa.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include 
#include 
#include 

void rysuj_bmp(HDC hDC,HBITMAP hBmp, int ix, int iy)
{
   BITMAP bitmap;
   HDC hTempDC = CreateCompatibleDC( hDC);


   GetObject( hBmp, sizeof(BITMAP), &bitmap);


   SelectObject( hTempDC, hBmp);
   BitBlt( hDC, ix, iy, bitmap.bmWidth + ix, bitmap.bmHeight + iy, hTempDC, 0, 0, SRCCOPY);

   DeleteDC( hTempDC);
}

void cursoroff()
{
 CONSOLE_CURSOR_INFO ccinf;

 HANDLE _hcout = GetStdHandle(STD_OUTPUT_HANDLE);

 GetConsoleCursorInfo(_hcout,&ccinf);
 ccinf.bVisible = false;
 SetConsoleCursorInfo(_hcout,&ccinf);  
}


int main(int argc, char* argv[])
{
   char szTitle[] = "UNIKALNA NAZWA KONSOLI";
   HWND hOknoKonsoli;

   //kursor niewidoczny!
   cursoroff();

   //Szukamy okna konsoli
   SetConsoleTitle( szTitle);
   hOknoKonsoli = FindWindow( NULL, szTitle);

   //Wczytywanie pliku
   HBITMAP hBmp = (HBITMAP)LoadImage( NULL, "obrazek.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);

   //Czesc rysujaca
   HDC hDC = GetWindowDC( hOknoKonsoli);

   rysuj_bmp( hDC, hBmp, 10, 50);

   ReleaseDC( hOknoKonsoli, hDC);




   //Koniec aplikacji
   printf( "Nacisnij cos.....");
   while( ! kbhit( ))
       Sleep( 100);

   return 0;
}


Odnośnik do komentarza
Udostępnij na innych stronach

I tak nie obejdzie się bez:

 

#include <windows.h>

 

Na jedno wyjdzie...

 

@wojass:

 

Ten kod nie jest całkowicie dobry... ;]

 

@topic:

 

Weź się za WinAPI.

Jeśli w Dev-Cpp stworzysz nowy projekt (WinAPI), to by zamieścić obrazek użyjesz kilku linijek. Dosłownie.

No i ofc cała aplikacja wygląda o niebo lepiej... :P

Odnośnik do komentarza
Udostępnij na innych stronach

W X11 jest tak samo. LOLOLOL. ;DD Tylko że wiesz, to co ty zrobisz a bezpośrednie wyświetlenie w terminalu to jest co innego.

 

no tak :) przecież grafiki nie umieszczamy w buforze STD_OUT tylko w kontekscie okienka. Jak przejdziesz na Fullscreen to juz rysowanie niedziała bo zmienia się sposób wyświetlania. Chyba też to można obejść ale to gra niewarta swieczki:)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...