GDI+で画像を読み込みOpenGLのテクスチャにする

最終更新日31 Jul 2017 01:17

#include <Windows.h>
#include <gdiplus.h>//一番上の方でインクルードすること。
#pragma comment(lib, "Gdiplus.lib")
GLuint texId;
void LoadPng(){
    Gdiplus::GdiplusStartupInput gpSI;
    ULONG_PTR lpToken;
 
    Gdiplus::GdiplusStartup(&lpToken, &gpSI, NULL);
 
     glEnable( GL_TEXTURE_2D );
     Gdiplus::Bitmap* image=new Gdiplus::Bitmap(L"kanu.png");
     Gdiplus::BitmapData data;
     image->LockBits( 0,  Gdiplus::ImageLockModeRead, PixelFormat32bppARGB, &data );
     glGenTextures( 1, &texId );
     glBindTexture( GL_TEXTURE_2D, texId );
     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
     glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
     glTexImage2D( GL_TEXTURE_2D, 0, 4, data.Width, data.Height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, data.Scan0 );
 
     glBindTexture( GL_TEXTURE_2D, 0 );
     image->UnlockBits( &data );
     delete image;//GdiplusShutdownより後に来てはダメ。
     Gdiplus::GdiplusShutdown(lpToken);
 
}
  • gdi plus 画像読み込みは楽だけど、画像保存はコード量が多い[2]
  • 実行環境によってはwidth,heightが超巨大な数字になる、というバグに遭遇した


ファイル

サポートサイト Wikidot.com