zoukankan      html  css  js  c++  java
  • Opengl Freeimage 保存屏幕像素到图片

    bool FreeImageLoader::SaveImage(char *imgpath)
    {
        /*
        int img_widht,img_height;
        unsigned char *mpixels =new unsigned char[1024*768*4];
        FREE_IMAGE_FORMAT fif =FIF_PNG;
        BOOL bSuccess = FALSE;
    
        glReadBuffer(GL_FRONT);
        glReadPixels(0, 0, 1024, 768, GL_RGBA, GL_UNSIGNED_BYTE, mpixels);
        glReadBuffer(GL_BACK);
        for(int i=0; i<(int)1024*768*4; i+=4)
        {
            //repeated xor to swap bytes
            mpixels[i] ^= mpixels[i+2] ^= mpixels[i] ^= mpixels[i+2];
        }
        FIBITMAP* bitmap = FreeImage_ConvertFromRawBits(mpixels,1024,768,4096,32,8,8,8,FALSE); 
        //FIBITMAP *dibsave = FreeImage_Load(FIF_PNG,"img/default.png", 0);
        //FIBITMAP *dibsave =FreeImage_Allocate(FIF_PNG,800,800,32);
        //img_widht=FreeImage_GetWidth(dibsave);
        //img_height=FreeImage_GetHeight(dibsave);
    
        
        bSuccess = FreeImage_Save(FIF_PNG, bitmap, "gg1.png", PNG_DEFAULT);
         FreeImage_Unload(bitmap);
         delete[] mpixels;*/
        unsigned char *mpixels =new unsigned char[800*600*4];
        glReadBuffer(GL_FRONT);
        glReadPixels(0, 0, 800, 600, GL_RGBA, GL_UNSIGNED_BYTE, mpixels);
        glReadBuffer(GL_BACK);
        for(int i=0; i<(int)800*600*4; i+=4)
        {
            
            mpixels[i] ^= mpixels[i+2] ^= mpixels[i] ^= mpixels[i+2];
        }
        FIBITMAP* bitmap =FreeImage_Allocate(800,600,32,8,8,8);
    
        for(int y =0 ;y<FreeImage_GetHeight(bitmap);y++)
        {
            BYTE *bits =FreeImage_GetScanLine(bitmap,y);
            for(int x =0 ;x<FreeImage_GetWidth(bitmap);x++)
            {
                bits[0] =mpixels[(y*800+x)*4+0];
                bits[1] =mpixels[(y*800+x)*4+1];
                bits[2] =mpixels[(y*800+x)*4+2];
                bits[3] =255;
                bits+=4;
    
            }
    
        }
        bool bSuccess = FreeImage_Save(FIF_PNG, bitmap,imgpath, PNG_DEFAULT);
         FreeImage_Unload(bitmap);
    
        return bSuccess;
    
    }

    更新

    2017 -4 -25

    freeimage保存图片主要几个函数

    FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;  //  这个是要保存图片的格式,可以选择 FIF_JPEG   FIF_PNG  FIF_BMP 等等几十种格式 
    fif = FIF_JPEG;


    FIBITMAP* convertedBmp; //定义一个freeimage的数组用来保存数据
    //然后我们可以遍历图片的宽高逐个写入像素的值

    DLL_API BOOL DLL_CALLCONV FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags FI_DEFAULT(0));
    //最后这个函数就是保存图片到文件了,第一个参数是图片的格式,上面已经说了,第二个是数据的内容,传刚才的bitmap就好,第三个参数是文件的名字,最后一个是图片的质量

    //下面从别的地方抄来的例子

    PixelType* pixels = pix.getPixels();
    unsigned int width = pix.getWidth();
    unsigned int height = pix.getHeight();
    unsigned int bpp = pix.getBitsPerPixel();

    FREE_IMAGE_TYPE freeImageType = getFreeImageType(pix);
    FIBITMAP* bmp = FreeImage_AllocateT(freeImageType, width, height, bpp);
    unsigned char* bmpBits = FreeImage_GetBits(bmp);
    if(bmpBits != NULL)

    {
      int srcStride = width * pix.getBytesPerPixel();
      int dstStride = FreeImage_GetPitch(bmp);
      unsigned char* src = (unsigned char*) pixels;
      unsigned char* dst = bmpBits;
      for(int i = 0; i < (int)height; i++)

      {

        memcpy(dst, src, srcStride);
        src += srcStride;
        dst += dstStride;
      }
    }







  • 相关阅读:
    1 Anytao系列文章
    arraylist使用
    安装SQL 2005 的前提条件
    div+css
    Web MVC框架的三种类型
    使用javascript做页面间传值
    应用程序框架设计
    利用UrlRewrite,asp.net动态生成htm页面
    收集
    dwr配置
  • 原文地址:https://www.cnblogs.com/dragon2012/p/2861084.html
Copyright © 2011-2022 走看看