c언어 콘솔창에서 이미지를 출력할수 있나요>?

hodoing의 이미지

3일째 날밤새고 찾아봤지만 어렵네요
C언어 프로젝트를 하는데요
콘솔창에서 이미지를 로드해서 화면에 출력하고 싶은데
그런 사례가 없어서 미치겠어요 ㅠㅠ
근데 외국사이트에서 하나 발견했는데요 ㅠ

http://stackoverflow.com/questions/12378642/c-pixels-in-console-window
여기서 찾아봤는데요

조금이나마 가능성을 찾았습니다 ㅠ

#include
#include
#include

using namespace std;

#define PI 3.14

int main()
{
//Get a console handle
HWND myconsole = GetConsoleWindow();
//Get a handle to device context
HDC mydc = GetDC(myconsole);

int pixel =0;

//Choose any color
COLORREF COLOR= RGB(255,255,255);

//Draw pixels
for(double i = 0; i < PI * 4; i += 0.05)
{
SetPixel(mydc,pixel,(int)(50+25*cos(i)),COLOR);
pixel+=1;
}

ReleaseDC(myconsole, mydc);
cin.ignore();
return 0;
}

여기 소스코드에서 이미지파일을 로드해서 화면에 출력하는 코드를 어캐 넣어야 할까요>?ㅠ
고수님들 조언 꼭 부탁드려요 ㅠㅠ

mirheekl의 이미지

거기서 새로 윈도나 다이얼로그를 하나 띄워서 거기에 그림을 뿌리면 됩니다. 꼭 콘솔 윈도 자체에 뿌려야 할 이유가 있는지 궁금합니다.
하긴 이미 윈도 핸들을 얻으셨으니 비트맵을 화면에 출력하는 예제라면 이미 지금상태에서도 다 갖다 쓸 수 있을 듯 합니다. GDI+쪽 예제들이 제일 쓰기 쉬울 듯.

--

hodoing의 이미지

조건이 콘솔창에서 뿌리는 조건으로 하라고 해서요 ㅠㅠ
윈도우 창 하나 띄우지 않고 콘솔에서 뿌리는건 불가능한건가요>ㅠ
예문 하나만이라도..ㅠ

익명 사용자의 이미지

문제 내신 분께 다시 한번 어떤 API 혹은 라이브러리를 사용해야 하는지 물어 보세요.
그정도는 물어봐도 됩니다.
콘솔(아마도 명령 프롬프트를 말씀하시는거 같은데...)이 원래 텍스트 찍으라고 있는 환경이기 때문에
여기에 그래픽을 그리라는 것 자체가 이상한 요구입니다.

누가 문제 낸 것이 아니고 스스로 그렇게 설계를 한 거라면,
이상한 방식으로 하지 마시고 제발 평범하게 가세요.

cococo의 이미지

리눅스라면 Framebuffer 모드에서 하면 되고...

윈도우라면, 잘 모르겠네요. console 에 띄울 수 있나?
console 에서 윈도우 핸들을 찾으려면
화면 그릴 수 있는 window 가 떠 있어야 되고 + IPC 로 외부 입력을 받아서 window 에서 화면을 갱신해야 되고...

dlffos의 이미지

https://kldp.org/node/132763

kldp에 2012년도에 관련된 질문이 올라온게 있어서 혹시 맞나싶어 링크 걸어드립니다..

mirheekl의 이미지

상황상 GDI+가 가장 사용하기 편한 것으로 생각되어 이걸 사용했습니다. GDIPlus.lib를 링커 옵션에 추가해주어야 합니다.

#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
 
using namespace Gdiplus;
 
int main()
{
	char keyInput[10] = "";
	GdiplusStartupInput gdiplusStartupInput;
	ULONG_PTR gdiplusToken = NULL;
	GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
 
	Graphics *pGraphics = new Graphics(GetDC(GetConsoleWindow()));
	Image *pImage = pGraphics ? new Image(L"C:\\WinTemp\\__MYTEMP\\20140224_142900\\splash.bmp") : NULL;
 
	if (pImage)
	{
		pGraphics->DrawImage(pImage, 10, 10);
	}
	else
	{
		printf("Error\n");
	}
 
	fgets(keyInput, 10, stdin);
 
	delete pImage;
	delete pGraphics;
	GdiplusShutdown(gdiplusToken);
	return 0;
}

중간에 파일 경로 부분은 당연히 바꿔주셔야 합니다. 아니면 커맨드 라인으로 경로를 받게 해도 됩니다.

DC만 받아오면 콘솔창도 일반 윈도와 거의 흡사한 그래픽 표현이 가능합니다.

헌데 이런 걸 숙제로 낼 정도면 아마도 GDI+를 쓰는 것도 인정 안할지도 모르겠네요. (비트맵이면 GDI+를 안 써도 큰 차이는 안 나긴 합니다.)

--

hodoing의 이미지

사진이 콘솔기본창 (80 *25)보다 큰 사진은 잘려 나옵니다..
이부분은 어떻게 수정해야 할까요?
사진은 원본크기 그대로 나왔으면 완벽합니다 ㅎㅎ

mirheekl의 이미지

직접 콘솔윈도우의 크기를 키워야지요. 콘솔창 등록정보 보면 가로세로 크기 지정하는 부분이 있습니다. 한번 저장하면 다음번에는 자동으로 적용되어 있을겁니다.

프로그램 상으로 처리하려면 http://www.3dbuzz.com/forum/threads/102195-How-do-you-resize-a-console-window-in-C 여기 참고.

근데 그런 예외사항을 고려해봤자 어차피 바탕화면보다 큰 해상도의 그림은 제대로 출력 못할텐데요. 자동 리사이즈 출력이 더 나은 방법으로 보입니다.

--

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.