我現在很掙扎,希望有人能幫助我。從SQL數據庫到CImage的圖像
我必須從SQL數據庫中獲取圖像(如使用SQLGetData),並將該數據轉換爲CImage,以便在程序中查看它。
感謝您的幫助!
SQLGetData(m_Hstmt, col, SQL_C_BINARY, BinaryPtr, 0, &cbData)
我現在很掙扎,希望有人能幫助我。從SQL數據庫到CImage的圖像
我必須從SQL數據庫中獲取圖像(如使用SQLGetData),並將該數據轉換爲CImage,以便在程序中查看它。
感謝您的幫助!
SQLGetData(m_Hstmt, col, SQL_C_BINARY, BinaryPtr, 0, &cbData)
的問題可以降低到加載從一個字節數組CImage
,因爲這是你從SQLGetData
得到什麼。
您沒有指出是否意味着要使用ATL或MFC,但在這兩種情況下都有點尷尬,因爲沒有public :: LoadFromBuffer函數。
這個答案應該做的: https://stackoverflow.com/a/6759701/1132334
它說明了如何創建一個從字節的緩衝區的位圖結構,並從那裏構造的CImage。
如果你需要處理不同的圖片格式,這將是棘手。在這種情況下,將原始字節寫入內存映射文件,然後使用CImage::Load(IStream*)
過載。
編輯:所有迄今做過... https://stackoverflow.com/a/14035492/1132334和https://stackoverflow.com/a/38710933/1132334
感謝所有的答覆。根據@dlatikay的回答,這是我的代碼到目前爲止。但我不知道類型和不知何故我的圖像保持黑色(當我將它保存到文件系統)
繼承人我的代碼到目前爲止。
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
}
歡迎來到Stack Overflow!你可以先參加[遊覽]並學習[問]一個很好的問題,然後創建一個[mcve]。這使我們更容易幫助你。 – Katie
請告訴我們你到目前爲止所嘗試過的。什麼沒有用?另請閱讀並遵循http://stackoverflow.com/help/how-to-ask –