最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

vs/C++資源視圖中的jpg圖片格式如何加載進(jìn)GDI中 (CREATEDC IMAGE類(lèi) GDI使用)

2023-06-02 20:50 作者:-最后的雨-  | 我要投稿

如果你將資源類(lèi)型設(shè)置為 "IMAGE",并且將圖片的資源 ID 設(shè)置為 "IMAGE01",以下是相應(yīng)的代碼修改示例:



HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(IDR_IMAGE01), L"IMAGE");

  • FindResource 函數(shù)用于查找指定資源的句柄。

  • NULL 表示在當(dāng)前可執(zhí)行文件中搜索資源。

  • MAKEINTRESOURCE(IDR_IMAGE01) 將資源 ID 轉(zhuǎn)換為字符串類(lèi)型,用于指定要查找的資源。

  • "IMAGE" 是資源類(lèi)型,與你在資源視圖中設(shè)置的類(lèi)型相匹配。

  • hResource 是找到的資源的句柄。


HGLOBAL hGlobal = LoadResource(NULL, hResource);

  • LoadResource 函數(shù)用于加載指定資源的內(nèi)容。

  • NULL 表示在當(dāng)前可執(zhí)行文件中加載資源。

  • hResource 是資源的句柄。

  • hGlobal 是加載的資源的全局內(nèi)存句柄。

LPVOID pResourceData = LockResource(hGlobal);

  • LockResource 函數(shù)用于鎖定資源的全局內(nèi)存句柄,并返回資源數(shù)據(jù)的指針。

  • hGlobal 是資源的全局內(nèi)存句柄。

  • pResourceData 是指向資源數(shù)據(jù)的指針。

DWORD imageSize = SizeofResource(NULL, hResource);

  • SizeofResource 函數(shù)用于獲取資源的大?。ㄒ宰止?jié)為單位)。

  • NULL 表示在當(dāng)前可執(zhí)行文件中計(jì)算資源大小。

  • hResource 是資源的句柄。

  • imageSize 是資源的大小。


HGLOBAL hMemory = GlobalAlloc(GMEM_MOVEABLE, imageSize);

LPVOID pMemoryData = GlobalLock(hMemory);

CopyMemory(pMemoryData, pResourceData, imageSize);

  • GlobalAlloc 函數(shù)用于分配全局內(nèi)存塊。

  • GMEM_MOVEABLE 標(biāo)志表示分配的內(nèi)存塊可移動(dòng)。

  • hMemory 是分配的全局內(nèi)存句柄。

  • GlobalLock 函數(shù)用于鎖定全局內(nèi)存句柄,并返回內(nèi)存塊的指針。

  • pMemoryData 是指向鎖定的內(nèi)存塊的指針。

  • CopyMemory 函數(shù)用于將資源數(shù)據(jù)從 pResourceData 復(fù)制到 pMemoryData 中,以便后續(xù)使用。

IStream* pStream = NULL;

CreateStreamOnHGlobal(hMemory, TRUE, &pStream);

  • CreateStreamOnHGlobal 函數(shù)用于創(chuàng)建基于內(nèi)存塊的流。

  • hMemory 是全局內(nèi)存句柄。

  • TRUE 表示釋放內(nèi)存時(shí)同時(shí)釋放內(nèi)存塊。

  • pStream 是創(chuàng)建的流對(duì)象的指針。

Image* pImage = Image::FromStream(pStream);

  • Image::FromStream 是 GDI+ 圖像類(lèi)的靜態(tài)成員函數(shù),用于從流中加載圖像。

  • pStream 是包含圖像數(shù)據(jù)的流對(duì)象。

  • pImage 是加載的圖像

GlobalUnlock(hMemory);

pStream->Release();

流對(duì)象是一種抽象概念,它表示數(shù)據(jù)的序列或數(shù)據(jù)流。在編程中,流對(duì)象用于以一種統(tǒng)一的方式處理輸入和輸出。

流對(duì)象可以與各種數(shù)據(jù)源和目標(biāo)進(jìn)行交互,例如文件、內(nèi)存、網(wǎng)絡(luò)連接等。它們提供了一組通用的方法和操作,使得讀取和寫(xiě)入數(shù)據(jù)變得簡(jiǎn)單和一致。

流對(duì)象通常用于以下操作:

  • 從數(shù)據(jù)源讀取數(shù)據(jù),如讀取文件內(nèi)容或從網(wǎng)絡(luò)連接接收數(shù)據(jù)。

  • 將數(shù)據(jù)寫(xiě)入目標(biāo),如將數(shù)據(jù)寫(xiě)入文件或?qū)?shù)據(jù)發(fā)送到網(wǎng)絡(luò)連接。

  • 進(jìn)行數(shù)據(jù)操作和轉(zhuǎn)換,如復(fù)制、壓縮、加密等。

在代碼示例中,通過(guò)使用 CreateStreamOnHGlobal 函數(shù),創(chuàng)建了一個(gè)基于內(nèi)存塊的流對(duì)象 (IStream* pStream)。這個(gè)流對(duì)象可以用于加載圖像數(shù)據(jù),并提供了一組方法來(lái)訪問(wèn)和操作圖像數(shù)據(jù)。

使用流對(duì)象的好處是,它提供了一種抽象層,使得無(wú)論數(shù)據(jù)源是文件、內(nèi)存還是其他類(lèi)型的資源,我們都可以使用相同的方式讀取和處理數(shù)據(jù)。這種統(tǒng)一的接口簡(jiǎn)化了數(shù)據(jù)處理的操作,并提供了更高的靈活性和可移植性。

CreateStreamOnHGlobal(hMemory, TRUE, &pStream) 的作用是將內(nèi)存中的圖像數(shù)據(jù)存儲(chǔ)到流對(duì)象中。

CreateStreamOnHGlobal 函數(shù)用于創(chuàng)建一個(gè)基于內(nèi)存塊的流對(duì)象,并將內(nèi)存塊中的數(shù)據(jù)與該流對(duì)象關(guān)聯(lián)起來(lái)。參數(shù) hMemory 是全局內(nèi)存塊的句柄,它包含了圖像數(shù)據(jù)。參數(shù) TRUE 表示在釋放流對(duì)象時(shí)同時(shí)釋放內(nèi)存塊。

通過(guò)調(diào)用 CreateStreamOnHGlobal 函數(shù)并傳遞內(nèi)存塊的句柄,以及用于存儲(chǔ)流對(duì)象地址的指針 &pStream,函數(shù)將創(chuàng)建一個(gè)與內(nèi)存塊關(guān)聯(lián)的流對(duì)象,并將該流對(duì)象的地址存儲(chǔ)在 pStream 指向的位置。

這樣一來(lái),我們就可以通過(guò) pStream 這個(gè)流對(duì)象來(lái)訪問(wèn)和操作內(nèi)存中的圖像數(shù)據(jù),比如加載圖像、讀取圖像信息等。




如果你已經(jīng)成功地將圖片資源加載到內(nèi)存中,并創(chuàng)建了一個(gè) Image 對(duì)象(例如 pImage),接下來(lái)你可以在 GDI 中使用該圖片進(jìn)行繪制。下面是一個(gè)簡(jiǎn)單的示例,展示如何在 GDI 中使用圖片對(duì)象進(jìn)行繪制:



HDC hdc; // 設(shè)備上下文句柄


// 在窗口的繪圖過(guò)程中使用 hdc


// 獲取圖片的寬度和高度

int imageWidth = pImage->GetWidth();

int imageHeight = pImage->GetHeight();


// 創(chuàng)建兼容的內(nèi)存設(shè)備上下文

HDC memDC = CreateCompatibleDC(hdc);


// 創(chuàng)建位圖句柄

HBITMAP hBitmap = NULL;

BITMAPINFO bmi = { 0 };

bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

bmi.bmiHeader.biWidth = imageWidth;

bmi.bmiHeader.biHeight = -imageHeight; // 負(fù)值表示頂部向下的位圖

bmi.bmiHeader.biPlanes = 1;

bmi.bmiHeader.biBitCount = 32; // 假設(shè)圖片為32位顏色

bmi.bmiHeader.biCompression = BI_RGB;

bmi.bmiHeader.biSizeImage = 0;


BYTE* pBits = NULL;

hBitmap = CreateDIBSection(memDC, &bmi, DIB_RGB_COLORS, (void**)&pBits, NULL, 0);


if (hBitmap)

{

? ? // 將位圖選入內(nèi)存設(shè)備上下文

? ? HBITMAP oldBitmap = (HBITMAP)SelectObject(memDC, hBitmap);


? ? // 繪制圖片到位圖

? ? Graphics graphics(memDC);

? ? graphics.DrawImage(pImage, 0, 0, imageWidth, imageHeight);


? ? // 在窗口上繪制位圖

? ? BitBlt(hdc, 0, 0, imageWidth, imageHeight, memDC, 0, 0, SRCCOPY);


? ? // 恢復(fù)內(nèi)存設(shè)備上下文的原始位圖

? ? SelectObject(memDC, oldBitmap);

}


// 釋放位圖資源

if (hBitmap)

? ? DeleteObject(hBitmap);


// 釋放內(nèi)存設(shè)備上下文

DeleteDC(memDC);

在上述示例中,首先獲取了圖片的寬度和高度,然后創(chuàng)建了一個(gè)兼容的內(nèi)存設(shè)備上下文 memDC。接著,創(chuàng)建了一個(gè)位圖句柄 hBitmap,用于繪制圖片。使用 GDI+ 的 Graphics 對(duì)象將圖片繪制到位圖中。最后,使用 BitBlt 函數(shù)將位圖從內(nèi)存設(shè)備上下文繪制到窗口的設(shè)備上下文 hdc 中。

這只是一個(gè)簡(jiǎn)單的示例,實(shí)際使用中可能需要根據(jù)具體的需求和繪圖操作進(jìn)行相應(yīng)的調(diào)整


vs/C++資源視圖中的jpg圖片格式如何加載進(jìn)GDI中 (CREATEDC IMAGE類(lèi) GDI使用)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
定西市| 岳池县| 沁水县| 凤台县| 横峰县| 大厂| 稷山县| 延川县| 西昌市| 淮滨县| 东明县| 体育| 思南县| 曲沃县| 静安区| 武宣县| 清丰县| 白河县| 汾西县| 井冈山市| 天镇县| 乡宁县| 湄潭县| 靖江市| 太原市| 南丹县| 连云港市| 奇台县| 北辰区| 绵阳市| 锡林浩特市| 高尔夫| 牟定县| 青冈县| 鸡泽县| 黎川县| 安图县| 铅山县| 堆龙德庆县| 揭西县| 旬邑县|