'2008/06'에 해당되는 글 9건

  1. 2008/06/25 [MFC, DLL] Image를 그레이 스케일 버퍼로 생성후 그려주는 다이얼로그 소스
  2. 2008/06/23 [MFC, DLL] Image를 표시해 주는 다이얼로그 소스
  3. 2008/06/11 C# Ftp File Upload - File Type 처리할때
  4. 2008/06/06 C++용 CxImage 6.0 - Library 코드
  5. 2008/06/04 [C++] 파일 암호화/복호화 처리하기 - 소스
  6. 2008/06/04 [C++] 파일 암호화/복호화 처리하기 - [펌]
  7. 2008/06/04 C++ 객체 팩토리(Object Factory)
  8. 2008/06/02 Kaxaml 폼을 비슷하게 따라 만들어본 베이스 프레임
  9. 2008/06/01 Kaxaml 1.0 Tool
2008/06/25 02:29

[MFC, DLL] Image를 그레이 스케일 버퍼로 생성후 그려주는 다이얼로그 소스

사용자 삽입 이미지

그레이 스케일로 표현해주는 코드가 일부 들어가 있는 소스입니다.
MFC DLL 형태로 제작되어 있으며, 바로 이전의 게시물과 거의 동일한 구조입니다.
몇가지 단위 테스트를 위해서 제작된 샘플 프로젝트입니다.

관련 소스 :


.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/06/23 18:36

[MFC, DLL] Image를 표시해 주는 다이얼로그 소스

사용자 삽입 이미지

MFC DLL : 한장의 이미지를 보여 주는 dll 파일입니다.
                현재 jpg의 파일만 인코딩이 가능합니다.
                (이 부분은 확장자를 사용해서 처리 하시면 됩니다. 아직 그건 추가 하지 않았네요. )

사용시에는 아래의 코드를 이용 하시면 됩니다.

 CDlgImage dlg( "E:\\Gsi_Project\\정상옥_프로젝트\\Project\\2008_06_23_LAM_ModuleTest\\bin\\blue.jpg" );
 dlg.DoModal();

이외의 생성자 인자로서는 해당 width, height를 입력해줄 수 있으며,
내부 코드에서는 해당 다이얼로그에 맞도록 리셈플링 처리가 되어 있습니다.


실행파일 :



.

프로젝트 파일 :


.

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/06/11 02:55

C# Ftp File Upload - File Type 처리할때

C#을 이용한 FTP로 파일 업로드 하는 코드 입니다.
MSDN에 있는
              ...........
            StreamReader sourceStream = new StreamReader("testfile.txt");
            byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
             .............
이런 코드를 사용하니까. 인코딩에서 데이터가 제대로 전달되지 못하는 문제가 발생합니다.
그래서 아래와같이 처리 했습니다.

        private void btnFileUploadTest_Click(object sender, EventArgs e)
        {
            Upload("blue.jpg");
            Upload("크기변환_dddd.png");
            Upload("zskin.txt");

            MessageBox.Show("Upload 가 완료되었습니다.");
        }

        private void Upload(string filename)
        {
            FileInfo fileInf = new FileInfo(filename);
            string uri = "ftp://192.168.0.3:8451/" + fileInf;
            FtpWebRequest reqFTP;

            UriBuilder URI = new UriBuilder(uri);
            URI.Scheme = "ftp";

            reqFTP = (FtpWebRequest)FtpWebRequest.Create(URI.Uri);
            reqFTP.Credentials = new NetworkCredential("administrator", "gsi7091");
            reqFTP.KeepAlive = false;
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            reqFTP.UseBinary = true;
            reqFTP.ContentLength = fileInf.Length;
            reqFTP.UsePassive = true;

            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;

            FileStream fs = fileInf.OpenRead();

            try
            {
                Stream strm = reqFTP.GetRequestStream();
                contentLen = fs.Read(buff, 0, buffLength);

                while (contentLen != 0)
                {
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }

                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                throw;
            }
        }

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/06/06 16:28

C++용 CxImage 6.0 - Library 코드


http://www.codeproject.com/KB/graphics/cximage.aspx

CxImage 6.0 Full 코드를 컴파일 해서
png, jpg, bmp, gif 를 지원하도록 처리 해서 생성해 놓은 코드 임.



.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/06/04 21:07

[C++] 파일 암호화/복호화 처리하기 - 소스

퍼온글 주소 : http://www.debuglab.com/knowledge/dataencrypt.html

-내용-
dwDataLen = strPassword.GetLength();
CopyMemory(lpData, (LPVOID)(LPCTSTR)strPassword, strPassword.GetLength());

// 암호화
CCrypt Crypt;
Crypt.Create((LPBYTE)(LPCTSTR)strPassword, strPassword.GetLength());
Crypt.Encrypt(lpData, dwDataLen);
Crypt.Destroy();

// 암호화된 데이터 해독
Crypt.Create((LPBYTE)(LPCTSTR)strPassword, strPassword.GetLength());
Crypt.Decrypt(lpData, dwDataLen);
lpData[dwDataLen] = '\0';
::MessageBox(NULL, (LPCTSTR)lpData, "", MB_OK);

소스코드 :





.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/06/04 21:00

[C++] 파일 암호화/복호화 처리하기 - [펌]

데이터 암호화 방법

1.요약
데이터를 암호화하는 방법에는 여러가지가 있는데 가장 간단한 방법이 배타적 논리합(Exclusive OR)를 이용하는 방법이 있습니다.

이 방법은 너무 간단해서 보안에 치명적이죠. 특별한 암호방법을 고안해낼려면 그쪽 분야에 많은 연구와 노력이 필요한데 저를 포함해 대부분 암호화에 대한 지식이 거의 전무할겁니다.

저같은 사람들을 위해 MS에서 암호화를 위한 API를 제공하고 있습니다.
하지만 이것도 사용하기가 너무 복잡하고 여러 단계를 거져야하는 불편함이 있습니다.

그래서 최대한 사용하기 간단하게 Class로 만들어 보았습니다.


2.본문

먼저 암호에 필요한 API함수는 어떤것이 있는지 알아보겠습니다.
BOOL WINAPI CryptAcquireContext(HCRYPTPROV *phProv, LPCTSTR Container,
                LPCTSTR pszProvider, DWORD dwProvType, DWORD dwFlags);

BOOL WINAPI CryptCreateHash(HCRYPTPROV hProv, ALG_ID Algid,
                CRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash);

BOOL WINAPI CryptHashData(HCRYPTHASH hHash, BYTE *pbData,
                DWORD dwDataLen, DWORD dwFlags);

BOOL WINAPI CryptDeriveKey(HCRYPTPROV hProv, ALG_ID Algid,
                HCRYPTHASH hBaseData, DWORD dwFlags, HCRYPTKEY *phKey);

BOOL WINAPI CryptEncrypt(HCRYPTKEY hKey, HCRYPTHASH hHash,
                BOOL Final, DWORD dwFlags, BYTE *pbData,
                DWORD *pdwDataLen, DWORD dwBufLen);

BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash,
                BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
자세한 사용법은 MSDN을 참고하세요.
이러한 API의 사용법을 설명하지 않겠습니다. 사실 저도 자세히는 모름니다. Class 멤버 함수와 사용법을 소개드리겠습니다.

BOOL CCrypt::Create(LPBYTE pHashData, DWORD dwHashDataLen)
- 암호화나 해독에 필요한 Key를 생성하는 함수. 쉽게 여기에 Password가 들어간다고 생각하면 됩니다.
void CCrypt::Destroy()
- Create에서 만들어진 Handle을 제거합니다.
BOOL CCrypt::Encrypt(LPBYTE lpBuffer, DWORD& dwBufferLen, BOOL bFanal)
- 데이터를 암호화하는 함수
BOOL CCrypt::Decrypt(LPBYTE lpBuffer, DWORD& dwBufferLen, BOOL bFanal)
- 암호화된 데이터를 해독하는 함수

3.예제

dwDataLen = strPassword.GetLength(); 
CopyMemory(lpData, (LPVOID)(LPCTSTR)strPassword, strPassword.GetLength()); 

// 암호화 
CCrypt Crypt; 
Crypt.Create((LPBYTE)(LPCTSTR)strPassword, strPassword.GetLength()); 
Crypt.Encrypt(lpData, dwDataLen); 
Crypt.Destroy(); 

// 암호화된 데이터 해독 
Crypt.Create((LPBYTE)(LPCTSTR)strPassword, strPassword.GetLength()); 
Crypt.Decrypt(lpData, dwDataLen); 
lpData[dwDataLen] = '\0'; 

::MessageBox(NULL, (LPCTSTR)lpData, "", MB_OK);
Crypt.zip 다운로드

















- 2001.08.19 Smile Seo -



http://www.debuglab.com/knowledge/dataencrypt.html

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/06/04 10:53

C++ 객체 팩토리(Object Factory)

여러개의 객체를 생성하는 코드를 아래와 같이 일반적으로 사용합니다.

class Shape {};
class Line_ : public Shape  { public: Line_()   { printf("create Line\n");  } };
class Polygon_ : public Shape { public: Polygon_()  { printf("create Polygon\n"); } };
class Circle_ : public Shape  { public: Circle_()  { printf("create Circle\n"); } };

namespace DrawingType
{
 const int
  LINE = 1,
  POLYGON = 2,
  CIRCLE = 3;
};


Shape* Load( int drawingType )
{
 Shape* p;

 switch( drawingType )
 {
  using namespace DrawingType;
 case LINE:
  {
   p = new Line_();
  }
  break;

 case POLYGON:
  {
   p = new Polygon_();
  }
  break;

 case CIRCLE:
  {
   p = new Circle_();
  }
  break;
 }

 return p;
}

사용은 아래와 같이
 Shape* p;

 p = Load( DrawingType::LINE );
 delete p;
 p = Load( DrawingType::POLYGON );
 delete p;
 p = Load( DrawingType::CIRCLE );
 delete p;

하지만 이런 코드의 경우 객체의 추가로 인한 오버헤드가 커지게 됩니다.
그럼 이런 경우 어떻게 조금더 최적화가 가능해질것인가를 생각해 보면 아래와 같이 될 수 있습니다.

//
class ShapeFactory
{
 ShapeFactory() {}

public:
 typedef Shape* (*CreateShapeCallback)();

 static ShapeFactory& GetInstance()
 {
  static ShapeFactory sf;
  return sf;
 }

private:
 typedef std::map< int, CreateShapeCallback > CallbackMap;

public:
 bool RegisterShape( int ShapeId, CreateShapeCallback CreateFn )
 {
  return callbacks_.insert(
   CallbackMap::value_type( ShapeId, CreateFn ) ).second;
 }

 bool UnRegisterShape( int ShapeId )
 {
  return callbacks_.erase( ShapeId ) == 1;
 }

 Shape* CreateShape( int ShapeId )
 {
  CallbackMap::const_iterator I = callbacks_.find( ShapeId );
  if( I == callbacks_.end() )
   return NULL;

  return (I->second)();
 }

private:
 CallbackMap callbacks_;
};


namespace
{
 Shape* CreateLine()
 {
  return new Line_;
 }

 Shape* CreatePolygon()
 {
  return new Polygon_;
 }

 Shape* CreateCircle()
 {
  return new Circle_;
 }
 };

// 사용할때

 // 객체 레지스트리에 등록
 ShapeFactory::GetInstance().RegisterShape( DrawingType::LINE, CreateLine );
 ShapeFactory::GetInstance().RegisterShape( DrawingType::POLYGON, CreatePolygon );
 ShapeFactory::GetInstance().RegisterShape( DrawingType::CIRCLE, CreateCircle );

 p = ShapeFactory::GetInstance().CreateShape( DrawingType::LINE );
 delete p;
 p = ShapeFactory::GetInstance().CreateShape( DrawingType::POLYGON );
 delete p;
 p = ShapeFactory::GetInstance().CreateShape( DrawingType::CIRCLE );
 delete p;

객체를 레지스트리에 등록하고
사용하게 됩니다.

이때 더 나아간다면 템플릿을 사용해서 예외 처리를 조금더 기능적으로 해줄 수 있습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/06/02 00:06

Kaxaml 폼을 비슷하게 따라 만들어본 베이스 프레임

사용자 삽입 이미지

xaml 코드로만 작성해본 폼입니다.

관련코드 :


.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/06/01 10:45

Kaxaml 1.0 Tool

 

http://www.google.co.kr/imgres?imgurl=http://thewpfblog.com/images/yahoo1.jpg&imgrefurl=http://www.snowball.be/CategoryView,category,WPF.aspx&h=473&w=630&sz=261&tbnid=RkGYSUpLU1QJ:&tbnh=103&tbnw=137&prev=/images%3Fq%3Dwpf&hl=ko&sa=X&oi=image_result&resnum=15&ct=image&cd=3

Welcome to Kaxaml!

Kaxaml is a lightweight XAML editor that gives you a "split view" so you can see both your XAML and your rendered content (kind of like XamlPad but without the gigabyte of SDK). Kaxaml is a hobby and was created to be shared, so it's free! Feel free to download and try it out. If you don't like it, it cleans up nicely.

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0