_tcsncpy(pktSend.pszMsg, _T("5555555555555555"), _countof(pktSend.pszMsg)); // it's right
_tcsncpy의 count인자는 ( Number of characters to be copied.)
복사될 글자수를 의미하는데,
UNICODE나 _UNICODE가 define되어있을때는 wchar가 아닐때는 char가 들어가게 되는데
sizeof를 사용하게 되면 wchar일때 TCHAR pszMsg[256]이
wchar pszMSg[256]이 되어 실질적인 사이즈가 516바이트가 된다.
즉 ,다른부분의 스택 영역에 오버런이 발생하게 되는것이다.
VS2005로 오면서 _countof키워드가 추가되었는데 이 키워드를 이용하게 되면,
Compute the number of elements in a statically-allocated array.
MSDN에 있는 설명대로 배열의 갯수를 반환하게 되는것이다.
single byte나 multi byte나 신경안쓰고 배열의갯수 = 글자의 갯수로 보게 되면
UNICODE선언 유무에 따라 유니코드인지 안시코드인지 결정하게 되는 스트링 관련
함수들(_tcs 접두어가 붙는 CRT String macro functions)은 sizeof대신에 _countof를
사용하면 된다.
좀더 깊이 있게 살펴보자면 Security Enhanced 함수들도 찾아볼수 있는데,
Parameter Validation. Parameters passed to CRT functions are validated, in both secure functions and in many preexisting versions of functions. These validations include:
Checking for NULL values passed to the functions,
Checking enumerated values for validity,
Checking that integral values are in valid ranges.
There is also a handler for invalid parameters which is accessible to the developer. When an invalid parameter is encountered, instead of asserting and exiting the application, the CRT provides a way to check these problems with the _set_invalid_parameter_handler function.
Sized Buffers. The secure functions require that the buffer size be passed to any function that writes to a buffer. The secure versions validate that the buffer is large enough before writing to it, helping to avoid dangerous buffer overrun errors which could allow malicious code to execute. These functions will usually return an errno type of error code and invoke the invalid parameter handler if the size of the buffer is too small. Functions which read from input buffers, such as gets, have secure versions that require you to specify a maximum size.
Null termination. Some functions which left potentially non terminated strings have secure versions which ensure that strings are properly null terminated.
Enhanced error reporting. The secure functions return error codes with more error information than was available with the preexisting functions. The secure functions and many of the preexisting functions now set errno and often return an errno code type as well, to provide better error reporting.
Filesystem security. Secure file I/O APIs support secure file access in the default case.
Windows security. Secure process APIs enforce security policies and allow ACLs to be specified.
Format string syntax checking. Invalid strings are now detected, for example using incorrect type field characters in printf format strings.
Additional security enhancements are described in the documentation for each function.
이런 기능들을 해준다.
어렵게 생각할것없이 strcpy_s( ... ) ; 이런식으로, 일반 CRT스트링 함수에 _s 접미사를 붙여주면 된다.
다만 dest영역의 크기를 지정해줘야 하는데, 이부분이 귀찮다면
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
이걸 헤더에 선언해줌으로써 전처리 과정에서 strcpy를 strcpy_s로 바꿔주게 된다.
마지막으로, _tcsncpy와 _tcsncpy_s의 count부분에 sizeof를 사용해서 두 결과의 차이를 비교해보면
// You may wish to call this function if you are inserting a record and wish to // initialize all the fields, if you are not going to explicitly set all of them. void ClearRecord() { memset(this, 0, sizeof(*this)); } };
class CdboSBuddyList1 : public CCommand<CAccessor<CdboSBuddyList1Accessor> > { public: HRESULT Open() { HRESULT hr;
VS2005에서는 추가-클래스-ATL OLEDB 소비자 를 통해서 생성하는데 SP에 대해서는 insert, delete, update옵션이 적용되지 않으면 Accessor인지, Table인지 설정하는 옵션이 disable되고 파일을 생성해준다.
class CS_BuddyListAccessor { public:
// 다음 마법사 생성 데이터 멤버에는 열 맵의 해당 // 필드에 대한 상태 값이 들어 있습니다. 이 값을 // 사용하여 데이터베이스에서반환하는 NULL 값을 // 보유하거나 컴파일러에서 오류를 반환할 때 // 오류 정보를 보유할 수 있습니다. 이러한 필드 사용에 // 대한 자세한 내용은 Visual C++ 설명서의 // "마법사 생성 접근자"에서 "필드 상태 데이터 멤버"를 참조하십시오. // 참고: 데이터를 설정/삽입하기 전에 이들 필드를 초기화해야 합니다.
HRESULT OpenDataSource() { CDataSource _db; HRESULT hr; // #error Security Issue: The connection string may contain a password // 아래 연결 문자열에 일반 텍스트 암호 및/또는 // 다른 중요한 정보가 포함되어 있을 수 있습니다. // 보안 관련 문제가 있는지 연결 문자열을 검토한 후에 #error을(를) 제거하십시오. // 다른 형식으로 암호를 저장하거나 다른 사용자 인증을 사용하십시오. hr = _db.OpenFromInitializationString(L"Provider=SQLOLEDB.1;Password=xxxxx;Persist Security Info=True;User ID=xxxxx;Initial Catalog=xxxx;Data Source=xx.xx.xx.xx;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=LEEGUNHO;Use Encryption for Data=False;Tag with column collation when possible=False"); if (FAILED(hr)) { #ifdef _DEBUG AtlTraceErrorRecords(hr); #endif return hr; } return m_session.Open(_db); }
void CloseDataSource() { m_session.Close(); }
operator const CSession&() { return m_session; }
CSession m_session;
// 일부 공급자와 관련된 몇몇 문제점을 해결하기 위해 아래 코드에서는 // 공급자가 보고하는 것과 다른 순서로 열을 바인딩할 수 있습니다.
Wizard page를 통해 생성한 코드가 제대로 실행이 안된다는것은 말이 안된다는 가정하에 문제에 접근해 보았다. ATL코드를 죽 훑어보며 DynamicAccssor를 사용하니 문제없이 되었다. 그렇다면 문제는 ATL코드 자체에 있거나 생성한 코드에 있다는 2가지 결론에 도달할수 있었다.
VS6에서 생성한 코드와 비교하며 매크로의 차이, 멤버변수의 차이, 메소드의 차이 등에 대해서 비교를 해보았다. DEFINE_COMMAND가 DEFINE_COMMAND_EX로 변경되고 CALL시에 SP이름뒤에 ;가 붙는다는것 이외에는 별 문제가 없었다. 결국 binding시의 변수 순서에 문제가 있는것으로 생각하고, 몇번의 삽질을 통해 SP의 인자로 들어가는 멤버변수는 결과 레코드셋이 담기는 변수들 위에 위치해야 된다는 결과를 얻게 되었다.
거의 3일동안 삽질하다가 오늘도 안되면 그냥 DynamicAccessor를 이용해서 돌아가려고 했는데, 다행히 문제가 해결됐다 ^^;
TCHAR szFinal[255]; // direct conversion from BSTR to LPCTSTR only works // in Unicode _stprintf(szFinal, _T("%s"), (LPCTSTR)pID); AfxMessageBox(szFinal);
: 현재 이미지에서 지정한 영역만큼을 자른 뒤 그 이미지를 현재 이미지로 대체한다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
+ bool Crop(IN long left, IN long top, IN long right, IN long bottom, OUT CxImage *iDst = NULL)
: 현재 이미지에서 지정한 영역만큼을 자른 뒤 그 이미지를 현재 이미지로 대체한다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
+ bool CropRotatedRectangle(IN long topx, IN long topy, IN long width, IN long height, IN float angle, OUT CxImage *iDst = NULL)
: 자르는 영역에 회전을 준다. 나머지는 Crop()과 동일한 기능을 수행한다.
topx : 위 쪽의 두 점 중 왼쪽 점의 x값
topy : 위 쪽의 두 점 중 왼쪽 점의 y값
width : 선택영역의 너비
height : 선택영역의 높이
angle : 사각형의 회전각. 라디안을 사용한다.
iDst : Crop()과 동일
+ CxImage(IN DWORD imagetype = 0)
: Startup()만을 호출한다.
+ CxImage(IN CxFile *stream, IN DWORD imagetype)
: CxFile 객체를 이용하여 이미지를 로드한다.
+ CxImage(IN BYTE *buffer, IN DWORD size, IN DWORD imagetype)
: 버퍼에서 이미지를 가져온다. 버퍼는 CxMemFile 객체를 이용하여 파일 형태로 취급된다.
+ CxImage(IN DWORD dwWidth, IN DWORD dwHeight, IN DWORD wBpp, IN DWORD imagetype = 0)
: 이미지의 크기와 화소당 비트수(1, 4, 8, 24)를 지정하여 생성한다.
+ CxImage(IN const CxImage &src, IN bool copypixels = true, IN bool copyselection = true, IN bool copyalpha = true)
: 기존 이미지에서 새로운 이미지를 생성한다.
copypixels : 비트맵정보를 복사한다.
copyselection : 선택 영역의 데이터를 복사한다.
copyalpha : 알파 채널을 복사한다.
+ CxImage(IN const TCHAR *filename, IN DWORD imagetype)
: 파일로부터 이미지를 로드한다.
+ CxImage(IN FILE *stream, IN DWORD imagetype)
: 파일 핸들을 이용하여 이미지를 로드한다.
+ bool Decode(IN BYTE *buffer, IN DWORD size, IN DWORD imagetype)
: 메모리 버퍼로부터 파일을 읽어 들인다. 버퍼를 CxMemFile 객체를 이용하여 파일로 취급한다.
+ bool Decode(IN CxFile *hFile, IN DWORD imagetype)
: CxFile객체로부터 이미지를 읽어 들인다. 실제로 이미지를 읽어 들이는 메소드이다.
+ bool Decode(IN FILE *hFile, IN DWORD imagetype)
: 파일 핸들을 이용하여 이미지를 로드 한다. CxIOFile 객체를 이용한다.
+ bool DecreaseBpp(IN DWORD nbit, IN bool errordiffusion, IN RGBQUAD *ppal = 0, IN DWORD clrimportant = 0)
: 픽셀당 비트수를 nbit로 감소시킨다.
errordiffusion : true이면 에러디퓨전 디더링을 이용하여 화질을 향상시킨다.
ppal : 최종 이미지에서 사용될 팔레트. 지정하지 않으면 표준 팔레트가 사용된다.
clrimportant : 최종 이미지의 biClrImportant 값을 지정. 디폴트값은 0이다.
+ bool Destroy()
: 고스트 이미지가 아니라면 현재 할당된 메모리를 모두 해제한다. 고스트 이미지는 실제 이미지 데이터를 가진 객체를 가리키고 있을 뿐이므로 메모리를 해제할 필요가 없다. 모든 메모리가 해제되었다면 true를 반환하고 고스트이미지라면 false를 반환한다.
# bool DFT(IN int dir, IN long m, IN double *x1, IN double *y1, IN double *x2, IN double *y2)
: 이산 퓨리에 변환. x와 y는 2^m 개의 점을 가진 복소수 배열.
dir : 1이면 정변환, -1이면 역변환.
+ bool Dilate(IN long Ksize = 2)
: 이미지의 밝은 영역을 확장한다. Ksize는 커널(마스크)의 사이즈. 선택영역이 있으면 해당 영역에만 처리가 적용된다.
+ bool Dither(IN long method = 0)
: 지정한 방식에 따라 이미지를 흑백으로 변환한다.
0 = Floyd-Steinberg
1 = Ordered-Dithering (4x4)
2 = Burkes
3 = Stucki
4 = Jarvis-Judice-Ninke
5 = Sierra
6 = Stevenson-Arce
7 = Bayer (4x4 ordered dithering)
+ long Draw(IN HDC hdc, IN const RECT& rect, IN RECT *pClipRect = NULL, IN bool bSmooth = false)
: hdc를 이용하여 이미지를 화면에 출력한다. pClipRect를 지정하면 화면의 해당영역에만 이미지가 출력된다. 알파 채널, 알파 팔레트, 투명색, 불투명도를 지원한다.
+ long Draw(IN HDC hdc, IN long x = 0, IN long y = 0, IN long cx = -1, IN long cy = -1, IN RECT* pClipRect = 0, IN bool bSmooth = false)
: hdc를 이용하여 이미지를 화면에 출력한다. pClipRect를 지정하면 화면의 해당영역에만 이미지가 출력된다. 알파 채널, 알파 팔레트, 투명색, 불투명도를 지원한다.
+ long Draw2(IN HDC hdc, IN long x = 0, IN long y = 0, IN long cx = -1, IN long cy = -1)
: hdc를 이용하여 이미지를 화면에 출력한다. pClipRect를 지정하면 화면의 해당영역에만 이미지가 출력된다. 투명색만 지원한다.
+ long Draw2(IN HDC hdc, IN const RECT &rect)
: hdc를 이용하여 이미지를 화면에 출력한다. pClipRect를 지정하면 화면의 해당영역에만 이미지가 출력된다. 투명색만 지원한다.
+ void DrawLine(IN int StartX, IN int EndX, IN int StartY, IN int EndY, IN COLORREF cr)
: 브레즌햄 알고리즘을 이용하여 이미지에 선을 그린다.
+ void DrawLine(IN int StartX, IN int EndX, IN int StartY, IN int EndY, IN RGBQUAD color, IN bool bSetAlpha = false)
: 브레즌햄 알고리즘을 이용하여 이미지에 선을 그린다.
+ long DrawString(IN HDC hdc, IN long x, IN long y, IN const TCHAR *text, IN RGBQUAD color, IN const TCHAR *font, IN long lSize = 0, IN long lWeight = 400, IN BYTE bItalic = 0, IN BYTE bUnderline = 0, IN bool bSetAlpha = false)
: 이미지에 문자열을 출력한다.
+ long DrawStringEx(IN HDC hdc, IN long x, IN long y, IN CXTEXTINFO *pTextType, IN bool bSetAlpha = false );
: 이미지에 문자열을 출력한다.
+ bool Edge(IN long Ksize = 2)
: 픽셀간의 색상차이를 강조한다. 경계선이 나타난다. 선택영역이 있으면 해당 영역에만 처리가 적용된다.
+ void Enable(IN bool enable = true)
: 이미지의 출력 가능/불가능을 지정한다.
+ bool Encode(OUT CxFile *hFile, IN CxImage **pImages, IN int pagecount, IN DWORD imagetype)
: 여러 장의 이미지를 TIFF나 GIF 포맷으로 디스크에 저장한다.
pImages : 이미지 리스트
pagecount : 이미지의 개수
+ bool Encode(OUT CxFile *hFile, IN DWORD imagetype)
: 이미지를 특정 포맷(imagetype)으로 디스크에 저장한다.
+ bool Encode(OUT FILE *hFile, IN CxImage **pImages, IN int pagecount, IN DWORD imagetype)
: 여러 장의 이미지를 TIFF나 GIF 포맷으로 디스크에 저장한다.
pImages : 이미지 리스트
pagecount : 이미지의 개수
+ bool Encode(OUT BYTE * &buffer, OUT long &size, IN DWORD imagetype)
: 이미지를 특정 포맷(imagetype)으로 메모리의 버퍼에 저장한다. buffer는 반드시 NULL 이어야 한다.
+ bool Encode(OUT FILE *hFile, IN DWORD imagetype)
: 이미지를 특정 포맷(imagetype)으로 디스크에 저장한다.
+ bool Encode2RGBA(OUT BYTE * &buffer, OUT long &size)
: 이미지를 RGBA 포맷으로 변환하여 버퍼로 내보낸다.
+ bool Encode2RGBA(OUT CxFile *hFile)
: 이미지를 RGBA 포맷으로 변환하여 파일로 내보낸다. 파일은 CxMemFile, CxIOFile 타입을 사용하여야 한다.
# bool EncodeSafeCheck(IN CxFile *hFile)
: 인코딩을 위한 준비가 되었는지 검사한다. 준비가 되지 않았다면 true를 반환한다.
+ bool Erode(IN long Ksize = 2)
: 이미지의 어두운 영역을 확장시킨다. 커널의 크기를 Ksize로 지정한다. 선택영역이 있으면 해당 영역에만 처리가 적용된다.
+ bool Expand(IN long newx, IN long newy, IN RGBQUAD canvascolor, OUT CxImage *iDst = 0)
: 캔버스의 크기를 확장시킨다. newx와 현재 이미지의 너비 차이만큼 좌우가 확장되고 newy와 현재 이미지의 높이 차이만큼 상하가 확장된다. 본래의 이미지는 확장된 캔버스의 중앙에 위치하게 된다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
newx : 현재 이미지의 너비 + 확장할 너비
newy : 현재 이미지의 높이 + 확장할 높이
canvascolor : 확장된 공간에 채워질 색상
+ bool Expand(long left, long top, long right, long bottom, RGBQUAD canvascolor, CxImage *iDst = 0)
: 캔버스의 크기를 확장시킨다. 상하좌우의 크기를 따로 지정할 수 있다. 새로 만들어진 영역의 색깔을 canvascolor로 지정할 수 있다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
# bool FFT(IN int dir, IN int m,double *x, IN double *y)
# int gen_convolve_matrix (IN float radius, IN float **cmatrix_p)
: 2-패스 가우시안 필터의 각 패스에 사용될 1차원 컨볼루션 매트릭스를 생성한다.
# float* gen_lookup_table (IN float *cmatrix, IN int cmatrix_length)
: cmatrix를 이용하여 LUT를 만든다. 만들어진 LUT의 시작 주소를 반환한다.
+ RGBQUAD GetAreaColorInterpolated(IN float const xc, IN float const yc, IN float const w, IN float const h, IN InterpolationMethod const inMethod, IN OverflowMethod const ofMethod = OM_BACKGROUND, IN RGBQUAD *const rplColor = 0);
: 지정한 영역에서 보간한 색상을 반환한다.
inMethod : 보간 방식
IM_NEAREST_NEIGHBOUR : 가장 가까운 픽셀의 값을 반환한다.
IM_BILINEAR : 이웃한 4개의 픽셀을 이용하여 보간.
IM_BICUBIC : 인접한 16개의 픽셀을 이용하여 보간.
IM_BICUBIC2 : 인접한 16개의 픽셀을 이용하여 보간.
IM_BSPLINE : 인접한 16개의 픽셀을 이용하여 보간.
IM_LANCZOS : 인접한 12*12픽셀을 이용하여 보간.
ofMethod : 좌표를 계산하는 방식
OF_REAPET : 이미지의 경계를 벗어나면 클립 되어 경계선에 놓이게 된다.
OF_WRAP : 이미지의 크기를 단위크기로 한 상대 좌표에 놓이게 된다.
OF_MIRROR : 이미지의 경계선에 대하여 반사된 위치에 놓이게 된다.
OF_COLOR : rplColor이 정의 되었다면 rplColor을 반환하고 그렇지 않으면 투명한 흰색을 반환한다.
OF_BACKGROUND : 배경색을 반환한다.
OF_TRANSPARENT : 투명색을 반환한다.
rplColor : 입력 색상. 픽셀에 대한 계산이 수행되지 않았을 때 기본적으로 반환되는 색상이다.
+ BYTE* GetBits(IN DWORD row = 0)
: 이미지에서 지정한 행의 픽셀에 대한 포인터를 얻는다.
+ WORD GetBpp() const;
: 이미지의 비트 당 픽셀의 개수를 가져온다.
+ DWORD GetClrImportant() const;
: 팔레트의 색상 중 이미지를 표현하는데 필요한 색상의 수를 가져온다. SetClrImportant()로 지정된 값이 반환된다.
+ DWORD GetCodecOption(DWORD imagetype = 0);
: 이미지의 인코딩 옵션값을 가져온다.
+ BYTE GetColorType()
: 1 : 팔레트 컬러. 2 : RGB. 3 : RGBA
+ void* GetDIB() const
: 이미지가 저장된 영역의 시작 포인터를 반환.
+ DWORD GetEffWidth() const
: 이미지의 가로 너비를 반환한다.
+ long GetEscape() const
: 탈출 코드를 가져온다.
+ DWORD GetFlags() const
: SetFlags() 참조.
+ long GetFrame() const
: 현재 선택된 프레임의 번호를 가져온다.
+ DWORD GetFrameDelay() const
: GIF 포맷에서 현재 프레임의 딜레이를 가져온다. 밀리세컨드 단위이다.
+ DWORD GetHeight() const
: 이미지의 높이를 반환한다. 세로 픽셀의 개수.
+ BYTE GetJpegQuality() const
: Jpeg 이미지의 품질값을 가져온다.
+ BYTE GetJpegScale() const
: Jpeg 이미지의 스캐일값을 가져온다.
+ const char* GetLastError()
: 마지막으로 발생한 에러의 메시지 내용을 가져온다.
+ CxImage* GetLayer(IN long position)
: 지정한 위치의 레이어가 반환된다. position값이 0보다 작다면 마지막 레이어가 반환된다.
+ BYTE GetNearestIndex(IN RGBQUAD c)
: 팔레트에서 색상 c와 가장 가까운 색상의 인덱스값을 반환한다.
+ DWORD GetNumColors() const
: 이미지에서 사용되는 색상의 수를 가져온다. 0이면 24비트 이미지.
+ long GetNumFrames() const
: 파일에 포함된 이미지의 개수를 반환한다.
+ long GetNumLayers() const
: 객체에 직접적으로 할당되어 있는 레이어의 개수를 반환한다.
+ void GetOffset(IN long *x, IN long *y)
: 이미지의 오프셋 값을 반환한다. 오프셋은 이미지가 화면에 출력될 시작 좌표이다.
+ RGBQUAD* GetPalette() const
: 팔레트의 시작 주소를 반환한다. 실패하면 NULL을 반환한다.
+ bool GetPaletteColor(IN BYTE i, OUT BYTE *r, OUT BYTE *g, OUT BYTE *b)
: 지정한 인덱스의 색상값을 전달한다. 성공하면 true를 반환한다.
+ RGBQUAD GetPaletteColor(IN BYTE idx)
: 지정한 인덱스의 색상값을 반환한다. 실패하면 검정색을 반환한다.
+ DWORD GetPaletteSize()
: 팔레트의 크기를 반환한다. 바이트 단위이다.
+ CxImage* GetParent() const
: 객체가 레이어를 포함하고 있다면 그 레이어를 가지는 부모 레이어 이미지에 대한 포인터를 반환한다.
+ RGBQUAD GetPixelColor(IN long x, IN long y, IN bool bGetAlpha = true)
: 지정한 좌표의 색상값을 반환한다. 실패하면 투명색 또는 검정색을 반환한다.
+ RGBQUAD GetPixelColorInterpolated(IN float x, IN float y, IN InterpolationMethod const inMethod = IM_BILINEAR, IN OverflowMethod const ofMethod = OM_BACKGROUND, IN RGBQUAD *const rplColor = 0);
: 픽셀의 보간된 색상을 반환한다.
inMethod : 보간 방식
IM_NEAREST_NEIGHBOUR : 가장 가까운 픽셀의 값을 반환한다.
IM_BILINEAR : 이웃한 4개의 픽셀을 이용하여 보간.
IM_BICUBIC : 인접한 16개의 픽셀을 이용하여 보간.
IM_BICUBIC2 : 인접한 16개의 픽셀을 이용하여 보간.
IM_BSPLINE : 인접한 16개의 픽셀을 이용하여 보간.
IM_LANCZOS : 인접한 12*12픽셀을 이용하여 보간.
ofMethod : 좌표를 계산하는 방식
OF_REAPET : 이미지의 경계를 벗어나면 클립 되어 경계선에 놓이게 된다.
OF_WRAP : 이미지의 크기를 단위크기로 한 상대 좌표에 놓이게 된다.
OF_MIRROR : 이미지의 경계선에 대하여 반사된 위치에 놓이게 된다.
OF_COLOR : rplColor이 정의 되었다면 rplColor을 반환하고 그렇지 않으면 투명한 흰색을 반환한다.
OF_BACKGROUND : 배경색을 반환한다.
OF_TRANSPARENT : 투명색을 반환한다.
rplColor : 입력 색상. 픽셀에 대한 계산이 수행되지 않았을 때 기본적으로 반환되는 색상이다.
+ RGBQUAD GetPixelColorWithOverflow(IN long x, IN long y, IN OverflowMethod const ofMethod = OM_BACKGROUND, IN RGBQUAD *const rplColor = 0);
: 픽셀의 좌표를 지정한 방식에 따라 다시 계산한다. 정수 좌표를 사용한다.
ofMethod : 좌표를 계산하는 방식
OF_REAPET : 이미지의 경계를 벗어나면 클립 되어 경계선에 놓이게 된다.
OF_WRAP : 이미지의 크기를 단위크기로 한 상대 좌표에 놓이게 된다.
OF_MIRROR : 이미지의 경계선에 대하여 반사된 위치에 놓이게 된다.
OF_COLOR : rplColor이 정의 되었다면 rplColor을 반환하고 그렇지 않으면 투명한 흰색을 반환한다.
OF_BACKGROUND : 배경색을 반환한다.
OF_TRANSPARENT : 투명색을 반환한다.
rplColor : 입력 색상. 픽셀에 대한 계산이 수행되지 않았을 때 기본적으로 반환되는 색상이다.
+ BYTE GetPixelGray(IN long x, IN long y)
: 지정한 좌표의 색상을 그레이 스캐일로 변환하여 반환한다.
+ BYTE GetPixelIndex(IN long x, IN long y)
: 지정한 좌표의 팔레트 인덱스 값을 반환한다.
+ long GetProgress() const
: 느린 반복 등을 관리하기 위한 것.
+ long GetSize()
: 이미지의 크기를 반환한다.
+ RGBQUAD GetTransColor()
: 투명색을 가져온다.
+ long GetTransIndex() const
: 투명색의 인덱스를 가져온다. 없다면 -1이 반환된다.
+ DWORD GetType() const
: 현재 이미지의 포맷을 반환한다.
+ const TCHAR* GetVersion()
: CxImage의 버전을 반환한다.
+ const float GetVersionNumber()
: CxImage의 버전을 실수형으로 반환한다.
+ DWORD GetWidth() const
: 이미지의 너비를 반환한다. 가로 픽셀의 개수.
+ long GetXDPI() const
: TIFF, JPEG, PNG, BMP 포맷을 위한 수평 해상도를 가져온다.
+ long GetYDPI() const
: TIFF, JPEG, PNG, BMP 포맷을 위한 수직 해상도를 가져온다.
# void Ghost(IN CxImage *from)
: from의 head, info 정보는 복사해오고 나머지 정보는 포인터만 획득한다. info.pGhost 는 from을 가리키게 된다. 기존에 할당되어 있는 메모리를 해제하지는 않고 고스트 이미지를 만들기 때문에 사용에 주의를 기울여야 하겠다. public이 아니므로 외부에서는 접근할 수 없는 메소드이다.
+ bool GrayScale()
: 이미지를 8비트 그레이 스캐일 이미지로 변환한다.
+ long Histogram(IN long *red, IN long *green = 0, IN long *blue = 0, IN long *gray = 0, IN long colorspace = 0)
: 이미지 전체에서 색상의 각 요소들의 출현 빈도를 계산한다. 선택영역이 있으면 해당 영역에만 처리가 적용된다.
colorspace : 색공간을 RGB로 변환한다.
0 : 디폴트. 변환 없음.
1 : HSL에서 RGB로 변환
2 : YUV에서 RGB로 변환
3 : YIQ에서 RGB로 변환
4 : XYZ에서 RGB로 변환
+ bool HistogramEqualize()
: 이미지에 히스토그램 평활화를 적용한다.
+ bool HistogramLog()
: 히스토그램에 로그를 취한다. 밝기 변화가 좀 더 급해진다.
+ bool HistogramNormalize()
: 휘도값에 따라 히스토그램에 스트레치를 적용한다.
+ bool HistogramRoot()
: 히스토그램에 루트를 취한다.
+ bool HistogramStretch(IN long method = 0)
: 히스토그램을 확장하여 범위가 0 ~ 255가 되게 한다.
method
0 = luminance. YUV 색공간에서 휘도(Y)성분을 사용.
1 = linked channels. 하나의 LUT를 사용.
2 = independent channels. 각 채널별로 독립적인 LUT를 사용.
+ RGBQUAD HSLtoRGB(IN RGBQUAD lHSLColor)
: HSL컬러공간에서 YUV컬러공간으로 변환한다.
+ RGBQUAD HSLtoRGB(IN COLORREF cHSLColor)
: HSL컬러공간에서 YUV컬러공간으로 변환한다.
+ void HuePalette(IN float correction = 1)
: 레인보우 팔레트를 생성한다.
# float HueToRGB(IN float n1, IN float n2, IN float hue)
: Huew 값을 RGB 색공간으로 변환한 값을 반환한다.
+ bool IncreaseBpp(DWORD nbit)
: 픽셀당 비트수를 nbit로 증가시킨다.
+ void InitTextInfo( OUT CXTEXTINFO *txt );
: txt를 초기화한다.
+ bool IsEnabled() const
: 이미지가 출력가능하면 true를 반환한다.
+ bool IsGrayScale()
: 이미지가 256컬러를 사용하고 선형 그레이 스캐일 팔레트를 가졌다면 true를 반환한다.
선형 그레이 스캐일 : 인덱스 번호와 색상의 값이 똑같다.
+ bool IsIndexed() const
: 이미지가 256컬러나 그 이하를 사용한다면 true를 반환한다.
+ bool IsInside(IN long x, IN long y)
: 지정한 좌표가 이미지 안에 있으면 true를 반환한다.
# bool IsPowerof2(IN long x)
: x가 2의 멱수이면 true를 반환한다.
+ bool IsSamePalette(IN CxImage &img, IN bool bCheckAlpha)
: img가 현재 이미지와 같은 팔레트를 가지는 지 비교한다. bCheckAlpha가 true이면 rgbReserved 필드의 값도 비교한다.
+ bool IsTransparent(long x, long y)
: 지정한 좌표의 색상이 투명색이면 true를 반환한다.
+ bool IsTransparent() const
: 이미지가 투명색을 사용한다면 true를 반환한다.
+ bool IsValid() const
: 이미지가 올바르게 초기화 되었는지 검사한다. 올바르다면 true를 반환한다.
+ bool Jitter(IN long radius)
: 이미지의 각 픽셀을 무작위로 이동시킨다. radius는 픽셀이 이동 가능한 최대 거리이다. 선택영역이 있으면 해당 영역에만 처리가 적용된다.
# bool RepairChannel(IN CxImage *ch, IN float radius)
: 하나의 색 채널에 대해 RepairChannel()이 수행된다.
+ bool Resample(IN long newx, IN long newy, IN int mode = 1, OUT CxImage* iDst = NULL)
: 이미지의 크기를 변경한다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
mode : 0은 이중선형 보간법으로 속도가 느리고 1은 가장 근접한 픽셀을 선택하는 방식으로 속도가 빠르다. 2는 bicubic 스플라인 보간법으로 품질이 좋다.
+ bool Resample2(IN long newx, IN long newy, IN InterpolationMethod const inMethod = IM_BICUBIC2, IN OverflowMethod const ofMethod = OM_REPEAT, IN CxImage *const iDst = NULL, IN bool const disableAveraging = false)
: 이미지의 크기를 변경한다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
inMethod : 보간 방식
IM_NEAREST_NEIGHBOUR : 가장 가까운 픽셀의 값을 반환한다.
IM_BILINEAR : 이웃한 4개의 픽셀을 이용하여 보간.
IM_BICUBIC : 인접한 16개의 픽셀을 이용하여 보간.
IM_BICUBIC2 : 인접한 16개의 픽셀을 이용하여 보간.
IM_BSPLINE : 인접한 16개의 픽셀을 이용하여 보간.
IM_LANCZOS : 인접한 12*12픽셀을 이용하여 보간.
ofMethod : 좌표를 계산하는 방식
OF_REAPET : 이미지의 경계를 벗어나면 클립 되어 경계선에 놓이게 된다.
OF_WRAP : 이미지의 크기를 단위크기로 한 상대 좌표에 놓이게 된다.
OF_MIRROR : 이미지의 경계선에 대하여 반사된 위치에 놓이게 된다.
OF_COLOR : rplColor이 정의 되었다면 rplColor을 반환하고 그렇지 않으면 투명한 흰색을 반환한다.
OF_BACKGROUND : 배경색을 반환한다.
OF_TRANSPARENT : 투명색을 반환한다.
+ COLORREF RGBQUADtoRGB (RGBQUAD c)
: RGBQUAD 타입 색상을 COLORREF 타입으로 변환한다.
# void RGBtoBGR(BYTE *buffer, int length)
: RGB색상에서 Red와 Blue의 위치를 서로 바꾼다.
buffer : 변환할 픽셀이 저장되어 있는 버퍼
length : 버퍼의 길이. 바이트 단위이다.
+ RGBQUAD RGBtoHSL(RGBQUAD lRGBColor)
: RGB컬러공간에서 HSL컬러공간으로 변환한다.
+ RGBQUAD RGBtoRGBQUAD(COLORREF cr)
: COLORREF 타입 색상을 RGBQUAD 타입으로 변환한다.
+ RGBQUAD RGBtoXYZ(RGBQUAD lRGBColor)
: RGB컬러공간에서 HSL컬러공간으로 변환한다.
+ RGBQUAD RGBtoYIQ(RGBQUAD lRGBColor)
: RGB컬러공간에서 XYZ컬러공간으로 변환한다.
+ RGBQUAD RGBtoYUV(RGBQUAD lRGBColor)
: RGB컬러공간에서 YUV컬러공간으로 변환한다.
+ bool Rotate(IN float angle, OUT CxImage *iDst = NULL)
: 이미지를 지정한 각도만큼 회전시킨다. 회전된 이미지가 모두 들어 갈 수 있는 크기로 이미지가 확장된다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
+ bool Rotate180(OUT CxImage *iDst = NULL)
: 이미지를 180도 회전시킨다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
+ bool Rotate2(IN float angle, IN CxImage *iDst = NULL, IN InterpolationMethod inMethod = IM_BILINEAR, IN OverflowMethod ofMethod = OM_BACKGROUND, IN RGBQUAD *replColor = 0, IN bool const optimizeRightAngles = true, IN bool const bKeepOriginalSize = false);
: 이미지를 지정한 각도만큼 회전시킨다. 회전된 이미지가 모두 들어 갈 수 있는 크기로 이미지가 확장된다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
inMethod : 보간 방식
IM_NEAREST_NEIGHBOUR : 가장 가까운 픽셀의 값을 반환한다.
IM_BILINEAR : 이웃한 4개의 픽셀을 이용하여 보간.
IM_BICUBIC : 인접한 16개의 픽셀을 이용하여 보간.
IM_BICUBIC2 : 인접한 16개의 픽셀을 이용하여 보간.
IM_BSPLINE : 인접한 16개의 픽셀을 이용하여 보간.
IM_LANCZOS : 인접한 12*12픽셀을 이용하여 보간.
ofMethod : 좌표를 계산하는 방식
OF_REAPET : 이미지의 경계를 벗어나면 클립 되어 경계선에 놓이게 된다.
OF_WRAP : 이미지의 크기를 단위크기로 한 상대 좌표에 놓이게 된다.
OF_MIRROR : 이미지의 경계선에 대하여 반사된 위치에 놓이게 된다.
OF_COLOR : rplColor이 정의 되었다면 rplColor을 반환하고 그렇지 않으면 투명한 흰색을 반환한다.
OF_BACKGROUND : 배경색을 반환한다.
OF_TRANSPARENT : 투명색을 반환한다.
replColor : 입력 색상. 픽셀에 대한 계산이 수행되지 않았을 때 기본적으로 반환되는 색상이다.
optimizeRightAngles : 90도, 180도, 270도 회전에는 더 빠른 회전 함수를 호출한다.
bKeepOriginalSize : true이면 이미지를 회전하여도 이미지의 본래 크기가 유지 된다.
+ bool RotateLeft(OUT CxImage *iDst)
: 이미지를 왼쪽으로 90도 회전시킨다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
+ bool RotateRight(OUT CxImage *iDst)
: 이미지를 오른쪽으로 90도 회전시킨다. 만약 iDst를 지정하면 현재 이미지를 대체하지 않고 iDst에 처리된 이미지를 전달한다.
+ bool Save(IN const TCHAR *filename, IN DWORD imagetype)
: 이미지를 지정한 포맷으로 디스크에 저장한다.
+ bool SelectionAddColor(IN RGBQUAD c)
: 지정한 색상의 픽셀을 선택영역에 포함시킨다.
+ bool SelectionAddEllipse(IN RECT r)
: 기존의 선택영역에 타원형의 영역을 더한다.
+ bool SelectionAddPixel(IN int x, IN int y)
: 지정한 좌표의 픽셀을 선택영역에 더한다.
+ bool SelectionAddPolygon(IN POINT *points, IN long npoints)
: 기존의 선택영역에 다각형의 영역을 더한다.
points : 다각형의 꼭지점 리스트.
npoints : 꼭지점의 개수.
+ bool SelectionAddRect(IN RECT r)
: 기존의 선택영역에 사각형의 영역을 더한다.
+ bool SelectionClear()
: 선택영역을 지운다.
+ bool SelectionCopy(IN CxImage &from)
: from 이미지로부터 선택영역을 복사해 온다.
+ bool SelectionCreate()
: 선택영역에 대한 정보를 담을 새로운 버퍼를 생성한다.
+ bool SelectionDelete()
: 선택영역에 대한 정보를 담고 있는 버퍼를 제거한다.
+ void SelectionGetBox(IN RECT &r)
: 선택영역을 모두 포함하는 가장 작은 사각형을 반환한다.
+ bool SelectionInvert()
: 선택영역을 반전시킨다.
+ bool SelectionIsInside(IN long x, IN long y)
: 지정한 좌표가 선택영역 안에 있으면 true를 반환한다.
+ bool SelectionIsValid()
: 선택영역을 위한 버퍼가 할당되어 있다면 true를 반환한다.
+ bool SelectionSplit(OUT CxImage *dest)
: 선택 영역을 8비트 그레이 스캐일 이미지로 내보낸다.
+ bool SelectionToHRGN(OUT HRGN ®ion)
: 선택영역을 HRGN 타입으로 변환시킨다.
+ void SetClrImportant(IN DWORD ncolors = 0)
: 팔레트의 색상 중 이미지를 표현하는데 필요한 색상의 수를 지정한다. 인수의 값은 2^bpp보다 작은 값이어야 하며 0또는 생략하면 모든 색상을 필요로 한다는 의미가 된다.
+ bool SetCodecOption(IN DWORD opt, IN DWORD imagetype = 0)
: GIF, TIF, JPG에 대한 인코딩 옵션을 지정한다.
GIF : 0 = LZW (디폴트), 1 = none, 2 = RLE.
TIF : 0 = 자동 (디폴트), 또는 "tiff.h"에 정의되어 있는 것들. (COMPRESSION_NONE = 1, COMPRESSION_CCITTRLE = 2, ...)
JPG : enum CODEC_OPTION ( ENCODE_BASELINE = 0x01, ENCODE_PROGRESSIVE = 0x10, ...)에 정의되어 있는 값들 중 하나.
+ void SetEscape(long i)
: 느린 반복문 등이 수행되고 있을 때 i값을 -1로 주면 강제로 루틴을 빠져 나가게 한다.
+ void SetFlags(IN DWORD flags, IN bool bLockReservedFlags)
: 나중에 사용될 것을 생각해 만들어 둔 플래그.
flags
0x??00000 = 16비트 이미지, CMYK, 멀티 레이어를 위해 예약됨.
0x00??0000 = 블렌드 모드
0x0000???? = 레이어 id 또는 사용자 플래그
bLockReservedFlags : 예약된 플래그와 블렌드 모드를 보호한다.
+ void SetFrame(long nFrame)
: 다음에 읽어 들일 프레임의 번호를 지정한다. TIFF, GIF 이미지에서 사용한다.
+ void SetFrameDelay(DWORD d)SetFrame
: GIF 포맷에서 현재 프레임의 딜레이를 지정한다. 밀리세컨드 단위이다.
+ void SetGrayPalette()
: 팔레트를 그레이 스캐일로 지정한다.
+ void SetJpegQuality(BYTE q)
: JPEG 이미지의 화질을 지정한다. 범위는 0 ~ 100 이다.
+ void SetJpegScale(BYTE q)
: JPEG 이미지를 읽어 들일 때 확대/축소 비율을 지정한다. 가능한 숫자는 1, 2, 4, 8이다.
+ void SetOffset(long x,long y)
: 화면상에 이미지가 출력될 시작 위치.
+ void SetPalette(IN RGBQUAD *pPal, IN DWORD nColors = 256)
: 팔레트의 색상을 지정한다.
+ void SetPalette(IN rgb_color *rgb, IN DWORD nColors = 256)
RECENT COMMENT