1. 程式人生 > >使用GDI+讀取常用點陣圖格式

使用GDI+讀取常用點陣圖格式

ATL類CImage(在atlimage.h)已經封裝了GDI+中隊點陣圖的常用操作,通過msdn可以看到這樣的描述“CImage provides enhanced bitmap support, including the ability to load and save images in JPEG, GIF, BMP, and Portable Network Graphics (PNG) formats.”這說明,這個類可以支援JPEG、GIF、BMP、PNG等常用圖片格式,這樣就不再需要第三方庫如FreeImage了。

從pszFileName所指定的檔案載入點陣圖,那麼這個檔案就應當是上述的那些點陣圖格式檔案

view plaincopy to clipboardprint?
HRESULT CImage::Load(LPCTSTR pszFileName) 
HRESULT CImage::Load(LPCTSTR pszFileName)

建立一個空的點陣圖,其大小色深為引數指定的值。

view plaincopy to clipboardprint?
BOOL CImage::Create(int nWidth, int nHeight, int nBPP, DWORD dwFlags = 0)  
BOOL CreateEx(int nWidth, int nHeight, int nBPP, DWORD eCompression, const DWORD* pdwBitmasks = NULL, DWORD dwFlags = 0) 
BOOL CImage::Create(int nWidth, int nHeight, int nBPP, DWORD dwFlags = 0)
BOOL CreateEx(int nWidth, int nHeight, int nBPP, DWORD eCompression, const DWORD* pdwBitmasks = NULL, DWORD dwFlags = 0)
 

這裡要注意,如果要建立一個顏色格式為565的16位貼圖,必須制定eCompression和pdwBitmasks:

view plaincopy to clipboardprint?
CImage image;  
DWORD dwBitmasks[] = {RGB16_RED_MASK, RGB16_GREEN_MASK, RGB16_BLUE_MASK};  
image.CreateEx(width, height, 16, BI_BITFIELDS, dwBitmasks); 
CImage image;
DWORD dwBitmasks[] = {RGB16_RED_MASK, RGB16_GREEN_MASK, RGB16_BLUE_MASK};
image.CreateEx(width, height, 16, BI_BITFIELDS, dwBitmasks);
 

獲得點陣圖在記憶體中的實體地址。

view plaincopy to clipboardprint?
void * CImage::GetBits() 
void * CImage::GetBits()

這裡要注意兩點,1)由於點陣圖是由下往上掃描的,所以其返回的地址實際上是最後一行畫素的首地址;2)部分點陣圖在記憶體中的佈局有按2的冪次對齊的特性,所以每一行畫素的寬度並非點陣圖的實際寬度,而是比寬度更大的pitch(跨距),如圖

pitch的值往往是2的冪次,如256、512、1024等,這樣做的好處,當要取得點陣圖中的某個畫素時,可以使用位移運算代替乘法運算,從而加快速度,如假定pitch為1024,點陣圖首地址為p(不考慮倒序的情況),若要取得座標為x、y的畫素(x小於等於pitch,且從0開始),則需要 p + y * pitch + x,但這可以優化成 p + y << 10 + x

獲得當前點陣圖的pitch值

view plaincopy to clipboardprint?
int CImage::GetPitch() 

相關推薦

使用GDI+讀取常用點陣格式

ATL類CImage(在atlimage.h)已經封裝了GDI+中隊點陣圖的常用操作,通過msdn可以看到這樣的描述“CImage provides enhanced bitmap support, including the ability to load and save

使用CImage讀取常用點陣格式

ATL類CImage(在atlimage.h)已經封裝了GDI+中隊點陣圖的常用操作,通過msdn可以看到這樣的描述“CImage provides enhanced bitmap support, including the ability to load and sav

可移植畫素格式 PPM,灰度格式 PGM,點陣格式 PBM 的介紹 -- 視訊和影象程式設計基礎之一

可移植畫素圖格式 PPM,灰度圖格式 PGM,點陣圖格式 PBM 的介紹 簡介 可移植畫素圖格式(PPM),可移植灰度圖格式(PGM)和可移植點陣圖格式(PBM)是便於跨平臺的影象格式。有時候也被統稱為 PNM 格式 檔案格式描述 這三種格式其實是一樣的描述方法,只

使用GDI+實現24 點陣轉32位點陣

  今天利用修改影象的alpha通道實現了影象的倒影,但是在對影象進行測試的時候,發現24位的點陣圖不能實現倒影,究其原因是24位以下的影象沒有alpha通道,也就沒辦法利用修改alpha通道的方式去實現影象的倒影。於是就想辦法實現24點陣圖像轉成32點陣圖像。也就能具有al

如何將點陣格式圖片檔案(.bmp)生成geotiff格式圖片?

BMP檔案總體上由4部分組成,分別是點陣圖檔案頭、點陣圖資訊頭、調色盤和影象資料,如表5-1所示。 表5-1 BMP檔案的組成結構 點陣圖檔案頭(bitmap-file header) 點陣圖資訊頭(bitmap-information header) 彩色表/調色盤(color table)

opencv 讀取32點陣

#include <opencv2/opencv.hpp> #include <iostream> #include <windows.h> using namespace std; using namespace cv; int m

GDI之繪製點陣

#include <Windows.h> #include "resource.h" #include <wingdi.h> #pragma comment(lib,"msimg32.lib") // 視窗處理函式 HINSTANCE g_hIns

DIB點陣檔案的格式讀取、儲存和顯示

一、點陣圖檔案結構 點陣圖檔案由三部分組成:檔案頭 + 點陣圖資訊 + 點陣圖畫素資料 1、點陣圖檔案頭。點陣圖檔案頭主要用於識別點陣圖檔案。以下是點陣圖檔案頭結構的定義: typedefstruct tagBITMAPFILEHEA

使用gdal讀取影象資料,然後用構建gdi+點陣顯示

如果想利用雙快取顯示gdal讀取的影象資料,把影象資料構建成一個gdi+的點陣圖來顯示void CGdalGdiView::OnDraw(CDC* /*pDC*/) { CGdalGdiDoc* pDoc = GetDocument(); ASSERT_VALID(pD

VS2010 用CxImage讀入各種圖片格式後在記憶體中轉換為HBITMAP點陣

最近自學遊戲引擎設計,希望將各種圖片格式讀入記憶體後轉為HBITMAP處理,四處搜尋無果,最終參考以下兩篇博文自己搞定之 http://blog.csdn.net/wu_xiangwei/article/details/5096529 http://www.cnblogs.

GDI+ 在Delphi程式的應用 -- GDI+影象與GDI點陣的相互轉換

        Delphi的TBitmap封裝了Windows的GDI點陣圖,因此,TBitmap只支援bmp格式的影象,但是在Delphi應用程式中,常常會遇到圖形格式的轉換,如將Delphi點陣圖TBitmap的影象轉換為其它格式儲存,或者將其它影象格式轉換為TBit

VC++圖片控制元件(Picture Control)顯示資源點陣(BMP)、檔案點陣(BMP)、其它格式檔案圖片(JPG\PNG\BMP)的方法

在VC++ MFC程式設計中,我們常使用Picture Control圖片控制元件來顯示影象。下面簡單歸納幾種顯示不同的方式: 第一種、資源點陣圖方式顯示BMP圖片 如果要顯示的是一張BMP點陣圖,則可以採用資源點陣圖方式,具體步驟如下: (1)將BMP檔案拷貝到工程的r

Android讀取指定路徑的點陣(FR:徐海濤)

public Bitmap revitionImageSize(String path) throws IOException { BufferedInputStream in = new BufferedInput

libjpeg庫編碼圖片為jpg(ffmpeg解碼視訊儲存圖片:RGB格式點陣壓縮為jpg格式圖片)

壓縮流程(結合網上大家的資料以及libjpeg庫的example.c示例:都大同小異): 1、如何分配和初始化一個jpeg壓縮物件:      在libjpeg中jpeg壓縮物件被定義為struct

14.4 GDI 點陣物件 (I)

摘錄於《Windows程式(第5版,珍藏版).CHarles.Petzold 著》P522         在本章前面曾提到 Windows 從 1.0 版就開始支援 GDI 點陣圖物件。由於 Windows 3.0 引入了裝置無關點陣圖,因此 GDI 點陣圖物件現在有時也

建立WINCE下16位格式點陣實現快速BitBlt

在WINCE下,如果建立的點陣圖與螢幕裝置格式不一樣,將會導致BitBlt函式極為緩慢,因此需要建立一幅16位色565格式點陣圖,用此方法創建出的點陣圖可以提供1ms的快速BitBlt繪製。當然,如果裝置不是565顏色格式的,更改程式碼中的顏色掩碼位bmiColors就可以了

讀取bmp圖片的檔案頭,與點陣資訊頭

#define _CRT_SECURE_NO_WARNINGS #include <string> #include <Windows.h> void eee(FILE* fp) { BITMAPFILEHEADER bf =

三行程式碼實現gdi+ Bitmap物件匯入資原始檔點陣

下午在網上找了很久關於把資原始檔中的點陣圖匯入到gdi+的Bitmap物件中的方法,但是網上的方法不是要寫大段的程式碼,就是根本無法實現預期目標。最後通過我自己的嘗試發現了一個簡單易用的方法。就是先把點陣圖匯入到一個gdi物件CBitmap中然後通過其控制代碼載入到gdi+的

bmp點陣檔案:讀取、寫入、24位真彩轉8位灰度、灰度的二值化

影象的二值化處理就是講影象上的點的灰度置為0或255,也就是講整個影象呈現出明顯的黑白效果。即將256個亮度等級的灰度影象通過適當的閥值選取而獲得仍然可以反映影象整體和區域性特徵的二值化影象。在數字影象處理中,二值影象佔有非常重要的地位,特別是在實用的影象處理中,以二值影象處理實現而構成的系統是很多的,要進行

點陣讀取,PNG轉化為BMP

#include <imaging.h>#include <initguid.h>#include <imgguids.h> unsigned char* LoadBMP(char* file){ FILE *fp = fopen(fil