파일 형태

fopen의 두 번째 인수 mode에는 오픈 모드외에도 파일의 형태를 지정하는 플래그를 추가로 지정할 수 있다. 열고자 하는 파일이 텍스트 파일이면 t를 붙이고 이진 파일이면 b를 붙인다. 파일 형태에 아무런 지정이 없으면 전역 변수 _fnmode의 값이 사용된다. 이진 파일은 아무런 변환없이 읽혀지지만 텍스트 파일 모드로 파일을 열면 다음 두 가지 변환을 한다.
① 개행 코드를 의미하는 CR/LF 조합은 LF로 변환되어 읽혀지며 LF를 기록하면 CR/LF가 출력된다. 이런 변환을 해 주는 이유는 C 문자열 출력 함수들은 개행을 위해 확장열 LF(\n)를 사용하기 때문이다.
② 파일의 끝을 나타내는 Ctrl+Z(0x1A)는 EOF(-1)로 변환되어 읽혀진다. 단 "a+" 모드로 열었을 때는 끝부분에 데이터를 추가할 수 있도록 Ctrl+Z를 제거한다.
오픈 모드와 파일 형태가 mode 인수에 같이 기록되는데 오픈 모드가 먼저 오고 파일 형태가 뒤에 오는 형식으로 써야 한다. 단, +문자는 파일 형태 다음에 와도 상관없다. 다음이 mode인수의 예인데 문자열이므로 반드시 겹따옴표를 싸 주어야 한다.
"rt" : 텍스트 파일을 읽기 전용으로 연다.
"wb" : 이진 파일을 쓰기 전용으로 연다.
"r+b" : 이진 파일을 읽기, 쓰기 가능하도록 연다. "rb+"로 쓸 수도 있다.
이외에 mode 인수에는 캐시를 관리하는 방법과 임시 파일 생성에 대한 몇가지 플래그를 더 지정할 수 있다.

출처 : http://blog.naver.com/sharbong/100011099628


오랜만에 개발 관련 글을 쓰는 것 같다... 그동안 디자인 관련 글들만 써왔는데.. 이번엔 본업인 플밍 관련 글을 쓸까 한다.. 사실 디자인적인 얘기는 비전문가라 해도 쉽게 이해할 수 있지만 프로그래밍은 그러지를 못해서 잘 쓰지 않기로 했지만, 이번에는 그다지 어려운 것도 아니고, 포토샵을 다루는 사람이라면 재미있게 볼 수 도 있을 것 같아 쓰게 되었다.

이 글은 DirectX로 포토샵 블랜딩 모드를 구현하는 것을 보여주며, 본인도 정리하는 입장으로 쓰고 있는지라.. 약간 모자를 수도 있다. 그럴때는 과감히 리플~! 달기 바란다.  % --> .

PhotoShop BlendMode with DX
DirectX로 포토샵 블랜딩 모드 구현하기
사실 DX로 포토샵의 모든 블랜딩 모드를 구현할 수는 없으며, 일부만이지만 실무에서 자주 쓰는 블랜딩 모드를 구현하게 될 것이다. 블랜딩 모드를 설명하기 위해 2가지 이미지를 준비했다.

hDziHcy.jpg (200×150)

ZHwybDf.jpg (200×150)

Background ImageLayer Image
Multiply
설명(Description):
대상색과 원본색을 곱한다.

수식(Formula):
Result = SC * DC

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ZERO );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR );

uMtUy4d.jpg (200×150)

Screen
설명(Description):
Mulitiply 모드랑 반대되는 모드가 바로 Screen 모드다. 원본, 대상 색의 반전시킨다음 곱한다.

수식(Formula):
Result = 1 - ( 1 - SC ) * ( 1 - DC )

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVDESTCOLOR );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );

RV9yM7z.jpg (200×150)

Darken
설명(Description):
원본, 대상 색을 비교해 어두운 색만 표현한다.

수식(Formula):
Result = MIN( SC, DC )

DX 블랜딩 모드(DX Blending Mode):

SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_MIN );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );

CKcvRoG.jpg (200×150)

Lighten
설명(Description):
원본, 대상 색을 비교해 밝은 색만 표현한다.

수식(Formula):
Result = MAX( SC, DC )

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_MAX );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );

JyaTqum.jpg (200×150)

Additive
설명(Description):
원본, 대상 색을 더한다. 기본적인 블랜딩 모드다.

수식(Formula):
Result = SC + DC

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );

TaIbbJe.jpg (200×150)



건빵군의 말을 빌리자면 알카노이드따위-_-에 서버씩이나-_-와 DB씩이나-_-를 붙이느라고 삽질 꽤 했다-_-;

머 어찌됐건 간만에 캐주얼-_-;;; 게임 하나 완성(은 아니지만 더이상 하기는 귀찮으니 대충 완성)했다-_-;

게임에 대한 개선요청은 쌩까도록 하겠습니다-ㅅ-;

사실은 게임 내용은 그렇다 쳐도 사운드는 넣고 싶었는데-.ㅜ

sqlite를 하는데 많은 도움을 주신 한민훈군께 감사의 말씀을 전합니다-ㅅ-;

실행파일 및 소스가 포함된 파일을 올리니 혹시나 설마 소스가 궁금하신분은....으음... 엔간하면 안보시는 편이-_-;;;;
어지간히 대충 만들어놔서-ㅅ-;;


아래는 안에 들어가는 readme.txt파일

--------------------------------------------------------

제작자 : 숭실대학교 컴퓨터학부 9844199 지성욱

본 프로그램은 DirectX 9.0c이상을 필요로 합니다.

1. bin폴더 아래의 Server.exe를 실행합니다.
Rank.db에서 랭킹 데이터를 읽도록 되어 있으며 DB가 존재하지 않는경우 새로 생성하여 디폴트 데이터를 삽입하도록 되어 있습니다.
DB로의 쿼리 및 데이터 추가 삭제, 클라이언트와 주고받는 소켓이 왼쪽의 LogList에 보입니다.
Log는 기본으로 50개까지 볼 수 있고, 50개가 넘어가면 오래된 순서로 삭제합니다.

2. bin폴더 아래의 alkanoid.exe를 실행합니다.
기본적으로 localhost에 접속하도록 되어 있습니다.
서버에 접속이 실패하는 경우에는 클라이언트로만 돌아가도록 되어 있으며,  실행동안에는 랭킹 데이터가 갱신되나 저장되지는 않습니다.
서버에 접속하게 되면 서버에서 랭킹데이터를 받아오도록 되어 있습니다.
타이틀 화면에서 SpaceBar를 누르면 게임 화면으로 넘어갑니다.
게임화면에서 SpaceBar를 누르면 게임이 시작되며 이때부터 시간을 기록하게 됩니다.
왼쪽 방향키와 오른쪽 방향키로 바를 움직일 수 있습니다.
5번의 기회가 있으며 왼쪽위에 하트표시로 남은 기회를 표시합니다.
게임을 클리어 하게 되면 이름을 입력하는 입력창이 뜨고, 이름을 입력한 후 엔터키를 누르면 서버에 접속되어 있는 경우는 서버에 자신의 기록을 보내게 됩니다.
그 후 다시 타이틀 화면이 나오며, 새로운 랭킹과 방금 자신이 플레이한 스코어를 표시해줍니다.


텍스쳐들의 썸네일을 사진의 왼쪽 밑에처럼 이뿌게 만들어준다.

첨엔 걍 dds를 지원하는 이미지 라이브러리를 쓸까 하다가..
요즘 가끔 포토샵CS에서 tga저장하면 DX에서 안불러지는 경우가 있어서
DX에서 텍스쳐 만들게 해서 비트맵 이미지를 생성하게 해놨다.

EX :
CDXImageList il( 64 );
CListCtrl ctrlThumbnail;

LPDIRECT3DDEVICE9 pDevice = ??;

il.MakeThumbnailFromDirectory( pDevice, ctrlThumbnail, "C:\\Image\\" );

'자료 > 내자료' 카테고리의 다른 글

분절 모델의 접합부위 Normal값 수정  (0) 2006.02.23
enum string  (0) 2005.07.08
텍스쳐 포맷 변경해서 저장하기  (0) 2005.05.16
Alkanoid프로젝트 완료  (0) 2004.12.23
크래시 리포트를 만들어 보쟈  (0) 2004.09.02



크래시 리포트란 Unhandled Exception을 걍 Crash라 부르고 기록을 하는걸 말한다.
머 살짝 설명하면 걍 프로그램에 0으로 나눈다거나 널포인트를 참고할때 M$로 먼가를 보낼거냐고 물으면서 윈도의 바탕화면으로 튕겨나가는 상황이다.

머 크래시 리포트에 관련된 내용은
http://www.codeproject.com
를 뒤지면 여러가지를 찾을 수 있다.
대채로 윈도우에선 SEH(Structed Exception Handler)라는걸 사용해서 먼가를 남긴다.
미니덤프를 떠서 메일로 보내게 할수도 있지만 메일 클라이언트가 필요하므로 사용자가 날려줄리 없고. 먼가 자동으로 보내기엔 용량이 살짝 부담된다.
게다가 사실 실제로 쓰는건 콜스택 정보만 있으면 되기 땜시 덤프까지 남길 필요는 그다지 없다.

사용하기 위해선 dbghelp.dll 이라는게 필요하므로 실행파일과 함께 배포하쟈
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
에서 windbg를 다운받으면 안에 들가있다

그리고 프로젝트의 링크에 Generate Debug Info를 체크해서 pdb파일이 생기도록 해야한다.
그래서 크래시가 나서 죽었을때 그 실행파일을 만들었던 exe와 pdb파일, 그리고 소스 파일이 있어야 먼가를 찾아볼 수 있다.
exe와 pdb만 있어도 어느 클래스의 어느 함수 몇번째 라인, 어느 파일의 몇번째 라인에서 죽었는 지 알 수 있지만..
현재의 소스가 그때의 소스랑 상이하다면 소용이 없다-ㅅ-;

pdb를 유저에게 배포하게 되면 리포팅시에 바로 실행정보를 남기면 되므로 pdb를 따로 보관하지 않아도 되는 장점이 있으나, pdb를 배포한다는것은 내 프로그램을 해킹해주세요~ 라는 것과 마찬가지이니 그런짓은 하지 말도록 하쟈-ㅅ-;

대신 주소만 있으면 exe와 pdb파일을 열어서 주소를 넣으면 실행정보를 볼 수 있다.
멀로 보는가..하면
http://www.kgda.or.kr/cgi/technote/read.cgi?board=data_program&x_number=1069767908&r_search=kgdc&nnew=1
에서 받아서 본다-_-

이론적으로 궁금한 점이 있으면 나한테 묻지 말고 Debuging Application이라는 책을 사서 보도록 하쟈

첨부 파일로 코드 프로젝트에서 받아서 필요한 부분만 사부닥 뽑아서 쓰는 코드를 첨부해놨다.

pdb를 같이 배포해도 되는 경우는
http://www.codeproject.com/tools/leakfinder.asp
에서 받아서 쓰도록 하쟈

'자료 > 내자료' 카테고리의 다른 글

분절 모델의 접합부위 Normal값 수정  (0) 2006.02.23
enum string  (0) 2005.07.08
텍스쳐 포맷 변경해서 저장하기  (0) 2005.05.16
Alkanoid프로젝트 완료  (0) 2004.12.23
DX에서 쓰는 텍스쳐 썸네일 만들기  (0) 2004.10.02

+ Recent posts