1. 程式人生 > >OpenGL學習筆記(三)---FreeImage顏色顯示錯亂的解決方法

OpenGL學習筆記(三)---FreeImage顏色顯示錯亂的解決方法

一、簡介 

    看Nehe的教程學習OpenGL看到載入圖片時用到了FreeImage,跟著寫了下,發現圖片顏色是錯亂的。

如圖:


除錯的時候發現自己的少了一段程式碼:

	if ((imageType == FIT_BITMAP) && (FreeImage_GetBPP(pBitmap) == 24))
	{
		textureFormat = GL_RGBA;
		datatype = GL_UNSIGNED_BYTE;
		components = GL_RGBA;
		
		texturedata = (unsigned char*)malloc(nWidth*nHeight*4);

		int red, green, blue, alpha;
#ifdef	BIG_ENDIAN//! RGBA;
		red = 0; green = 1; blue = 2; alpha = 3;
#else//! BGRA;
		red = 2; green = 1; blue = 0; alpha = 3;
#endif

		int offset = 0;
		int offset_img = 0;

		for (unsigned int y = 0; y < nHeight; y++)
		{
			for (unsigned int x = 0; x < nWidth; x++)
			{
				texturedata[offset+red] = ((unsigned char*)bits)[offset_img+0];
				texturedata[offset+green] = ((unsigned char*)bits)[offset_img+1];
				texturedata[offset+blue] = ((unsigned char*)bits)[offset_img+2];
				texturedata[offset+alpha] = 0;
				offset += 4;
				offset_img += 3;
			}
			offset_img = y*nPitch;
		}
	}
其中BIG_ENDIAN是“大端模式”表示資料的讀取方式從高地址到低地址;

原來BMP格式圖片是按blue,green,red順序儲存的,而不是OpenGL常見的R,G,B順序。

二、解決方法

1.讀取資料的時候把資料按需要的方式讀取,像NeHe處理程式碼類似.

2.不想那麼麻煩可以,可以直接用OpenGL定義的轉換方式轉換,只需改一個引數:

(修改紅色字型部分,第7個引數): glTexImage2D(GL_TEXTURE_2D, level, internal_format, width, height,
border, GL_BGR_EXT, GL_UNSIGNED_BYTE, bits);//GL_RGB轉GL_BGR_EXT

效果如圖:

相關推薦

OpenGL學習筆記()---FreeImage顏色顯示錯亂解決方法

一、簡介      看Nehe的教程學習OpenGL看到載入圖片時用到了FreeImage,跟著寫了下,發現圖片顏色是錯亂的。 如圖: 除錯的時候發現自己的少了一段程式碼: if ((imageType == FIT_BITMAP) && (Free

SpringCloud學習筆記---Eureka資訊顯示問題, 自我保護機制及叢集搭建

一   Eureka整合到專案中出現的一些細節顯示問題 問題1.  註冊的服務中包含主機名稱 解決方法: 修改microservicecloud-provider-dept-8001  yml檔案中的配置,    instance:     instance-id

OpenGL學習筆記()

OpenGL繪製 清除視窗 在計算機中,儲存圖片的記憶體通常被計算機所繪製的前一幅影象所填充,因此在繪製新場景之前,一般需要把它清除為某種背景顏色。      void glClearColor(GLclampf red,GLclampf green,GLclampf bl

jvm學習筆記()類檔案結構、java方法數65535上限的原因

瞭解class類檔案結構,對於學習smali也是有必要的!一、class類檔案的結構(8位位元組,一個位元組佔8位,以位元組為基礎單位的二進位制流)儲存結構:class檔案是一組以位元組(8位)為基礎單位的二進位制流,各資料嚴格按照順序緊湊排列在class檔案中,中間沒有任何

opengl學習筆記)——玩弄模型(使用者互動)

經過前面兩節的功夫,我們算是搞到了一個還算可以的模型,但我們想要把模型翻來翻去,移動一下還是不行的。並且,根據使用者(老師)需求,我們要讓模型能以線框,點的方式繪製。也就有了這最後一講。 首先,我們通過滑鼠左鍵來旋轉物體。這就需要在滑鼠回撥函式裡下功夫了 if (state == GLUT_DO

OpenGL學習筆記(五)---維地圖

1.簡介         由於自己對WIN API不熟悉,所以把Nehe例程改成了“純”C++實現,當然,windows下程式設計還是用到了<windows.h>裡定義的一些巨集、結構體.....         NeHe教程10是用一張.bmp點陣圖實現了一個

OpenGL學習筆記OpenGL繪製方式

(1)OpenGL圖元    點:void glPointSize()    線、條帶、迴圈線:void glLineWidth()    三角形、條帶、扇面:    將多邊形渲染為點集、輪廓或者實體:   P68 正反面採用不同的方式繪製: glPolygonMode(GL

用glew,glfw,FreeImage實現opengl學習筆記6座標變換

這個程式碼參考教程點選開啟連結  這個教程很詳細,程式碼是實現座標的轉換,教程帶原始碼,我仿照原始碼在自己本地的實現,這裡給大家參考使用載入圖片是用的FreeImage是一個開源的載入圖片的,網上的資料也挺多的。這個程式的原始碼在這點選開啟連結  點選裡面的shader3

Android OpenGL ES學習筆記之新增顏色

一、分類 新增顏色的種類有兩種 - Flat coloring 單色 - Smooth coloring 平滑著色 單色 顧命思義就是一種單一的顏色,呼叫 glColor4f(float red,

OpenGL學習筆記——顏色

每個畫素的顏色資訊儲存方式: RGBA模式:有些圖形硬體可以使用抖動來增加可以顯示的顏色數量(抖動在預設情況下是開啟的)。 顏色索引:可用顏色數量受限於顏色對映表的大小以及可用的位平面的數量。 在程式執行早期,設定顏色顯示模式,當顏色顯示模式初始化之後就

Linux學習筆記():系統執行級與執行級的切換

查看 用戶操作 回車 water hat ntsysv tde 文件表 config 1.Linux系統與其它的操作系統不同,它設有執行級別。該執行級指定操作系統所處的狀態。Linux系統在不論什麽時候都執行於某個執行級上,且在不同的執行級上執行的程序和服務都不同,所要

【Unity 3D】學習筆記十:遊戲元素——遊戲地形

nbsp 3d遊戲 strong 直觀 分辨率 == 摩擦力 fill 世界 遊戲地形 在遊戲的世界中,必然會有非常多豐富多彩的遊戲元素融合當中。它們種類繁多。作用也不大同樣。一般對於遊戲元素可分為兩種:經經常使用。不經經常使用。經常使用的元素是遊戲中比較重要的元素。一

MYSQL學習筆記:日期和時間函數

div content minute name top fonts table hmm 指定 MYSQL學習筆記三:日期和時間函數 1. 獲取當前日期的函數和獲取當前時間的函數 /*獲取當前日期的函數和獲取當前時間的函數。將日期以‘YYYY-MM-DD‘或者’YYYYM

Hadoop權威指南學習筆記

支持 第三方 handle line src factory 模式 多個 重要 HDFS簡單介紹 聲明:本文是本人基於Hadoop權威指南學習的一些個人理解和筆記,僅供學習參考。有什麽不到之處還望指出,一起學習一起進步。 轉載請註明:http://blog.cs

NLTK學習筆記():NLTK的一些工具

ast 關註 code 值範圍 通過 自動 ive 叠代器 emma 主要總結一下簡單的工具:條件頻率分布、正則表達式、詞幹提取器和歸並器。 條件分布頻率 《自然語言學習》很多地方都用到了條件分布頻率,nltk提供了兩種常用的接口:FreqDist 和 Condit

Tomcat學習筆記()

containe 請求 container connect 技術 http 簡單 img 容器 Tomcat連接器 tomcat連接器是tomcat的一個核心組件,在tomcat4中的實現原理如下 1.實現Connector接口 2.創建Reques

mybatis學習筆記()-- 優化數據庫連接配置

bsp pro 新建 數據 配置信息 onf ron XML oca 原來直接把數據庫連接配置信息寫在conf.xml配置中,如下 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configura

Odoo10學習筆記:模型(結構化的應用數據)、視圖(用戶界面設計)

其他 描述 用戶界面 列表 支持 字段 界面設計 允許 學習 一:模型 1:創建模型 模型屬性:模型類可以使用一些屬性來控制它們的一些行為: _name :創建odoo模型的內部標識符,必含項。 _description :當用戶界面顯示模型時,一個方便用戶的模型記錄標題。

tensorflow學習筆記():實現自編碼器

sea start ear var logs cos soft 編碼 red 黃文堅的tensorflow實戰一書中的第四章,講述了tensorflow實現多層感知機。Hiton早年提出過自編碼器的非監督學習算法,書中的代碼給出了一個隱藏層的神經網絡,本人擴展到了多層,改進

CSS學習筆記:自定義單選框,復選框,開關

sla checked 移動 transform 第一個 16px 位移 block back 一點一點學習CCS,這次學習了如何自定義單選框,復選框以及開關。 一、單選框 1、先寫好body裏面的樣式,先寫幾個框 1 <body> 2 <d