私は現時点で苦労しており、誰かが私を助けることを願っています。SQLデータベースからCImageへのイメージ
SQLデータベース(SQLGetDataなど)からImageを取得し、そのデータをCImageに変換してプログラムで表示できるようにする必要があります。
ありがとうございました!それはあなたがSQLGetData
から得るものですので、
SQLGetData(m_Hstmt, col, SQL_C_BINARY, BinaryPtr, 0, &cbData)
私は現時点で苦労しており、誰かが私を助けることを願っています。SQLデータベースからCImageへのイメージ
SQLデータベース(SQLGetDataなど)からImageを取得し、そのデータをCImageに変換してプログラムで表示できるようにする必要があります。
ありがとうございました!それはあなたがSQLGetData
から得るものですので、
SQLGetData(m_Hstmt, col, SQL_C_BINARY, BinaryPtr, 0, &cbData)
問題は、バイト配列からCImage
を読み込むまで低減することができます。
ATLまたはMFCを使用するかどうかを指定していませんが、どちらの場合もpublic :: LoadFromBuffer関数などがないので少し厄介です。
この答えは、実行する必要があります。 https://stackoverflow.com/a/6759701/1132334
それはバイトのバッファからのビットマップの構造を作成して、そこからのCImageを構築する方法について説明します。
さまざまな画像形式を処理する必要がある場合は、厄介なことになります。この場合、生のバイトをメモリマップファイルに書き込み、次にオーバーロードをCImage::Load(IStream*)
にします。
EDIT:そのすべての...の前に、これまですべての返信用https://stackoverflow.com/a/14035492/1132334とhttps://stackoverflow.com/a/38710933/1132334
おかげで行われて。 @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
}
ようこそスタックオーバーフロー!あなたは最初に[ツアー]を受け、良い質問をして[mcve]を作成することができます。そうすれば、私たちがあなたを助けやすくなります。 – Katie
あなたがこれまでに試したことを教えてください。何がうまくいかなかったのですか? http://stackoverflow.com/help/how-to-askも読んでフォローしてください。 –