【发布时间】:2015-12-08 05:01:19
【问题描述】:
我正在使用用于 OpenGL 的 C# 和 OpenTK 库,我想将 GLControl 与作为背景放置的图片框混合。
* 编辑 *
我通过改变方法解决了加载源图像的问题,所以现在我使用位图和位图数据结构:
Bitmap bitmap = new Bitmap("image.png");
BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
我确定我的 png 源有 4 个通道,黑色背景上的 alpha 值为 0
这是原始图像: http://imageshack.com/a/img801/517/u2z8.png
这就是问题所在: http://imageshack.com/a/img40/1729/zezj.jpg
top 是使用 GLControl 的纹理,bottom 是 Windows 窗体的 Picturebox,我想要做的是 GLControl 的黑色背景变得透明。
我启用 Blend 上限并使用 GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);,所以我认为这不是问题。
也许问题出在纹理环境上?
GL.TexEnv(TextureEnvTarget.TextureEnv, TextureEnvParameter.TextureEnvMode,GL_MODULATE);
【问题讨论】:
-
如果纹理使用
PixelFormat.Bgra,则不需要翻转像素。 -
您能解释一下(屏幕截图吗?)“但是最大的问题是当我尝试将 GLControl 与图片框混合时,似乎与图片中的其他信息混合完成."?