2016-12-14 2 views
0

私は現時点で苦労しており、誰かが私を助けることを願っています。SQLデータベースからCImageへのイメージ

SQLデータベース(SQLGetDataなど)からImageを取得し、そのデータをCImageに変換してプログラムで表示できるようにする必要があります。

ありがとうございました!それはあなたがSQLGetDataから得るものですので、

SQLGetData(m_Hstmt, col, SQL_C_BINARY, BinaryPtr, 0, &cbData) 
+0

ようこそスタックオーバーフロー!あなたは最初に[ツアー]を受け、良い質問をして[mcve]を作成することができます。そうすれば、私たちがあなたを助けやすくなります。 – Katie

+0

あなたがこれまでに試したことを教えてください。何がうまくいかなかったのですか? http://stackoverflow.com/help/how-to-askも読んでフォローしてください。 –

答えて

0

問題は、バイト配列からCImageを読み込むまで低減することができます。

ATLまたはMFCを使用するかどうかを指定していませんが、どちらの場合もpublic :: LoadFromBuffer関数などがないので少し厄介です。

この答えは、実行する必要があります。 https://stackoverflow.com/a/6759701/1132334

それはバイトのバッファからのビットマップの構造を作成して、そこからのCImageを構築する方法について説明します。

さまざまな画像形式を処理する必要がある場合は、厄介なことになります。この場合、生のバイトをメモリマップファイルに書き込み、次にオーバーロードをCImage::Load(IStream*)にします。

EDIT:そのすべての...の前に、これまですべての返信用https://stackoverflow.com/a/14035492/1132334https://stackoverflow.com/a/38710933/1132334

0

おかげで行われて。 @dlatikayの答えによると、これはこれまでの私のコードです。しかし、私はどのようにタイプについてはわかりませんし、どういうわけか私のイメージは黒くなります(ファイルシステムに保存すると)

heres my codeこれまでのところです。

SQLLEN cbData; 
CImage image; 

BYTE* imgBits; 

    m_Rc = SQLGetData(m_Hstmt, 1, SQL_C_BINARY, imgBits, 0, &cbData); 


    if (SQL_SUCCEEDED(m_Rc)) 
    { 
     width = 317; 
     height = 159; 

     BITMAPINFOHEADER bmInfohdr; 
     // Create the header info 
     bmInfohdr.biSize = sizeof(BITMAPINFOHEADER); 
     bmInfohdr.biWidth = width; 
     bmInfohdr.biHeight = -height; 
     bmInfohdr.biPlanes = 1; 
     bmInfohdr.biBitCount = 8 * 8; 
     bmInfohdr.biCompression = BI_RGB; 
     bmInfohdr.biSizeImage = width*height * 8; 
     bmInfohdr.biXPelsPerMeter = 0; 
     bmInfohdr.biYPelsPerMeter = 0; 
     bmInfohdr.biClrUsed = 0; 
     bmInfohdr.biClrImportant = 0; 

     BITMAPINFO bmInfo; 
     bmInfo.bmiHeader = bmInfohdr; 
     bmInfo.bmiColors[0].rgbBlue = 255; 

     // Allocate some memory and some pointers 
     unsigned char * p24Img = new unsigned char[width*height * 3]; 
     BYTE *pTemp, *ptr; 
     pTemp = (BYTE*)imgBits; 
     ptr = p24Img; 

     // Convert image from RGB to BGR 
     for (DWORD index = 0; index < width*height; index++) 
     { 
      unsigned char r = *(pTemp++); 
      unsigned char g = *(pTemp++); 
      unsigned char b = *(pTemp++); 

      *(ptr++) = b; 
      *(ptr++) = g; 
      *(ptr++) = r; 
     } 

     // Create the CImage 
     image.Create(width, height, 8, NULL); 
     image.Save(_T("c:\\temp\\image1.bmp")); // for testing 
    } 
関連する問題