标签: devil

将BMP加载到OpenGL纹理中会切换红色和蓝色.(C++ /视窗)

我想一个位图加载到一个OpenGL纹理,并显示到屏幕上,但是当我这样做,红色和蓝色值似乎切换(如:蓝色图像显示为橙色,绿色的图像保持不变,等等. ).这个问题只在加载位图时才存在,我可以加载.pngs相对无错误.

这是我用来加载位图和设置纹理的代码.我正在使用DevIl,但我不确定它是多么相关,因为当我使用不同的系统时存在问题(我不太记得什么,它是window.h中的一个函数,我相信):

ilOriginFunc(IL_ORIGIN_LOWER_LEFT);
ilEnable(IL_ORIGIN_SET);
ILuint image;
ilGenImages(1, &image);
ilBindImage(image);
ilLoad(IL_BMP, "Data/NeHe.bmp"); // Incidentally, loading a png, although it fixes the problem,
                                 // rotates the image 180 degrees.  Not sure if that's important or not,
                                 // But it's why I added the first line of code

glGenTextures(3, &_texture[0]);
glBindTexture(GL_TEXTURE_2D, _texture[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 3, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), \
    0, GL_RGB, GL_UNSIGNED_BYTE, ilGetData());
Run Code Online (Sandbox Code Playgroud)

ilInit()并且glEnable(GL_TEXTURE_2D)在程序的早期都被调用,以及其他不太相关的功能.任何帮助找到(并希望修复)问题的原因将非常感激.

c++ windows opengl bitmap devil

7
推荐指数
1
解决办法
5960
查看次数

恶魔没有用linux build加载图像

我在将图像加载到Devil时遇到问题所以我提供了我如何构建lib以及我如何使用它的确切方法.

从他们的网站下载Devel来源.

$ unzip DevIL-1.7.8.zip
$ mkdir devil
$ cd Devil-1.7.8
+-------------------------------------------+
| Just type:                                |
| autoreconf -i                             |
| ./configure <your options here>           |
| make                                      |
| sudo make install                         |
+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

如果我使用autoreconf -i,那么./configure有前缀和ilu和ilut.我收到一个错误..forgot ..来记录它.这有多重要?我刚刚没用过它.

$ chmod +x configure
$  ./configure --prefix=/home/path/to/TestingDevil/devil --enable-ILU --enable-ILUT
$ make
$ make install 
Run Code Online (Sandbox Code Playgroud)

所以在这一点上我应该建立我的图书馆.我将devil 简单示例(simple.c)下载到TestingDevil/simple/simple.c构建它.

$ gcc -I ../devil/include -L ../devil/lib/ simple.c -o simple -lIL -lILU -lILUT
$ cp ../devil/lib/*.so* .
Run Code Online (Sandbox Code Playgroud)

我添加了一个图像(jpg)进行测试.

$ LD_LIBRARY_PATH=. …
Run Code Online (Sandbox Code Playgroud)

c c++ linux devil

5
推荐指数
1
解决办法
768
查看次数

使用DevIL错误'IL_LIB_JPEG_ERROR 1506'

我正在编写一个使用DevIL进行图像处理的Android应用程序.我从这个项目得到了DevIL的端口及其依赖库.我编辑并提取了我需要的东西.编译很好,库工作,但当我尝试加载JPEG文件时它不会...

使用DevIL错误代码,我发现错误编号为1506,这IL_LIB_JPEG_ERROR意味着我的JPEG库中存在问题.我已经尝试更新到最新的JPEG库,但都失败了.我也试过其他JPEG文件,但我没有任何成功.

这是我的android.mk文件显示JPEG和DevIL模块片段:

JPEG

#libjpeg
include $(CLEAR_VARS)

LOCAL_MODULE    := libjpeg
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}

LOCAL_C_INCLUDES  :=  \
    ${JPEG_SRC_PATH}

LOCAL_SRC_FILES := \
    ${JPEG_SRC_PATH}jquant1.c \
    ${JPEG_SRC_PATH}jdtrans.c \
    ${JPEG_SRC_PATH}jerror.c \
    ${JPEG_SRC_PATH}wrppm.c \
    ${JPEG_SRC_PATH}jcparam.c \
    ${JPEG_SRC_PATH}jdmarker.c \
    ${JPEG_SRC_PATH}jidctfst.c \
    ${JPEG_SRC_PATH}jctrans.c \
    ${JPEG_SRC_PATH}cdjpeg.c \
    ${JPEG_SRC_PATH}jcomapi.c \
    ${JPEG_SRC_PATH}jmemansi.c \
    ${JPEG_SRC_PATH}jquant2.c \
    ${JPEG_SRC_PATH}wrtarga.c \
    ${JPEG_SRC_PATH}transupp.c \
    ${JPEG_SRC_PATH}jdmerge.c \
    ${JPEG_SRC_PATH}jdhuff.c \
    ${JPEG_SRC_PATH}jdmaster.c \
    ${JPEG_SRC_PATH}jcprepct.c \
    ${JPEG_SRC_PATH}jutils.c \
    ${JPEG_SRC_PATH}jccoefct.c \ …
Run Code Online (Sandbox Code Playgroud)

c++ android jpeg devil android-ndk

5
推荐指数
1
解决办法
386
查看次数

C++ DevIL函数ilLoadImage - 程序退出,访问冲突

我有一个以这种方式定义的文件路径:

const char* GROUND_TEXTURE_FILE = "objects/textures/grass.jpg";
Run Code Online (Sandbox Code Playgroud)

这是我用来加载图像的函数:

bool loadTexImage2D(const string &fileName, GLenum target) {
    ...
    // this will load image data to the currently bound image
    // at first, we must convert fileName, for ascii, this method is fine?
    wstring file(fileName.begin(), fileName.end());

    if(ilLoadImage(file.c_str()) == IL_FALSE) { //here the program falls
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题?ilLoadImage调用时为什么程序会掉线?我认为,file.c_str()作为一种wchar_t *类型应该可以正常工作吗?谢谢你的回答:)

c++ devil

5
推荐指数
1
解决办法
618
查看次数

在 64 位环境中使用 32 位程序集

我正在尝试将 DevIL.NET 集成到 3ds Max 中,以自动将我的图像转换为单一格式。为此,我在 C# 中创建了一个类库,它接受字符串并返回新文件路径

public static class FileConverter
{
    public static string ConvertFile(string _sOriginal)
    {
        // Load the file, save the file, return the new filepath
    }
}
Run Code Online (Sandbox Code Playgroud)

该项目引用了 DevIL.NET,它是 32 位版本。我的应用程序是 64 位版本,并提供BadImageFormatException. 说“它”不是有效的 Win32 应用程序。

我已经尝试通过在文件中添加额外的行来使我的应用程序成为 32 位.csproj<PlatformTarget>x86</PlatformTarget>。这样,我的测试项目确实可以工作,但我的类库却不能,因为 3ds Max 是一个 64 位应用程序。

如何将这 32-64 个问题排列起来,以便我的插件能够工作?假设 3ds Max 将是 64 位,而 DevIL.NET 将是 32 位。我似乎无法自己从 VC++ Express 2008 中的源代码构建 64 位 DevIL.NET。

.net 3dsmax 32bit-64bit devil

4
推荐指数
1
解决办法
4351
查看次数

在 C++ 中使用 DevIL 和 OpenGL 加载图像

正如标题所示,我尝试使用 DevIL 加载图像,然后将其传递给 OpenGL。我使用这段代码作为错误控制

const char* filename = "back.bmp";

if (!ilLoadImage(filename))
{
    throw runtime_error(std::string("Unable to load image") +filename);
}
Run Code Online (Sandbox Code Playgroud)

对于 if 语句,返回错误

error C2664: 'ilLoadImage' : cannot convert parameter 1 from 'const char *' to 'const wchar_t *'
Run Code Online (Sandbox Code Playgroud)

如果我定义filenameconst wchar_t* filename,我会收到错误

error C2664: 'ilLoadImage' : cannot convert parameter 1 from 'const char *' to 'const wchar_t *'
Run Code Online (Sandbox Code Playgroud)

所以现在我不会因为好奇为什么 [filename].bmp 文件是 wchar_t* 类型,或者 wchar_t 是什么(谷歌让我困惑)而让你感到好奇,我只会问我必须做什么才能使它工作:为什么它不起作用?我错过了什么?我确信一定有一个非常简短的解决方案。它看起来就像是那种错误。

谢谢。

c++ opengl image-processing devil

3
推荐指数
1
解决办法
3193
查看次数

使用OpenGL和DevIL调用glTextureParameteri时发生访问冲突

我正在尝试使用DevIL加载图像,然后创建纹理。我有一个名为的类Texture,并且正在构造函数中进行所有这些操作。一个有效的上下文已创建。第一次调用时遇到访问冲突glTextureParameteri(),因此我猜纹理未正确绑定。我只是没有理由不绑定它。

这是构造函数:

Texture::Texture(const std::string& filename){
//DevIL handle for the image
unsigned int ilID;

ilGenImages(1, &ilID);

ilBindImage(ilID);

ilEnable(IL_ORIGIN_SET);
ilOriginFunc(IL_ORIGIN_LOWER_LEFT);

if (!ilLoad(IL_BMP, (ILstring)filename.c_str())){
    DebugUtility::gl_log_err("Failed to load image &s\n", filename.c_str()); //Just function that prints to log file
    return;
}
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);

glGenTextures(1, &texture);

//"texture" is global GLuint
glBindTexture(GL_TEXTURE_2D, texture);

//LINE BELOW CAUSES ACCESS VIOLATION!
glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTextureParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTextureParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
    ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT),
    0, GL_RGBA, GL_UNSIGNED_BYTE, ilGetData());

ilDeleteImages(1, &ilID);
//Again, prints …
Run Code Online (Sandbox Code Playgroud)

c++ opengl textures access-violation devil

3
推荐指数
1
解决办法
1314
查看次数

在Ubuntu上安装C++库

我必须是一个菜鸟,总是在Linux上安装时遇到问题.我正在尝试安装:http://openil.sourceforge.net/download.php.所以我使用DL页面中的Devil 1.7.8 tar.gz来阅读手册(http://openil.sourceforge.net/docs/index.php).

  1. 我看到没有预编译的.so作为手册说明.

  2. 它尝试编译自己,我看到在执行配置,构建,安装后,没有对usr/lib或usr/include(作为手动状态)添加OpenIL.

  3. 我应该通过包管理器安装它...但我仍然不知道我需要包含/链接到哪些文件.

更新:仔细看看上面2的安装输出显示,实际上是在用户/本地下安装了东西(非常感谢手册).

所以,为了确定,我如何将.so和.h链接到我的程序.

c++ linux ubuntu devil

2
推荐指数
1
解决办法
1万
查看次数

使用DevIL从图像中检索的像素数据

我正在使用Visual Studio 2010,C++.

我要做的是从加载的图像中检索像素数据(特定于RGB颜色),然后在各种检查中使用它.目前,我想循环遍历所有数据,并能够检测像素何时是某种颜色(特定的R,G和B值).

我应该注意到我正在使用DevIL,我更喜欢继续使用DevIL(我已经看到了一些建议,可以帮助处理图像处理的其他工具).

现在,据我所知,DevIL函数ilgetData()检索一个指针,该指针包含一维字节数组中所有像素的所有RGB值.我不知道如何存储使用此函数获取的数据,然后在for循环中使用它.

示例代码非常感谢.

c++ image pixels devil

0
推荐指数
1
解决办法
2879
查看次数