问题标签 [pixelformat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
directx - 创建新的 Texture2D 时如何选择像素格式?
我正在使用 SharpDX Toolkit,并且正在尝试以编程方式创建 Texture2D,因此我可以手动指定所有像素值。而且我不确定用什么像素格式来创建它。
SharpDX 甚至没有记录工具包的 PixelFormat 类型(他们有另一个 PixelFormat 类的文档,但它是用于 WIC,而不是工具包)。我确实找到了它包装的 DirectX 枚举DXGI_FORMAT,但它的文档没有就我如何选择格式提供任何有用的指导。
我习惯于普通的 32 位位图格式,每个颜色通道 8 位加上 8 位 alpha,这对我来说已经足够好了。所以我猜最简单的选择是 R8G8B8A8 或 B8G8R8A8。我选择哪个重要吗?所有硬件都完全支持它们吗?
即使我选择了其中之一,我也需要进一步指定它是 SInt、SNorm、Typeless、UInt、UNorm 还是 UNormSRgb。我不需要 sRGB 颜色空间。我不明白无类型应该是什么。UInt 似乎是最简单的——只是一个普通的旧无符号字节——但事实证明它不起作用;我没有收到错误,但我的纹理不会在屏幕上绘制任何内容。UNorm 有效,但文档中没有任何内容可以解释 UInt 无效的原因。所以现在我很怀疑 UNorm 可能无法在其他显卡上工作。
这是我得到的代码,如果有人想看的话。下载 SharpDX 完整包,打开 SharpDXToolkitSamples 项目,转到 SpriteBatchAndFont.WinRTXaml 项目,打开 SpriteBatchAndFontGame 类,并在指示处添加代码:
这会在屏幕左上角绘制一个带有对角线的小矩形。它适用于我正在测试它的笔记本电脑,但我不知道如何知道这是否意味着它可以在任何地方工作,我也不知道它是否会是最高性能的。
我应该使用什么像素格式来确保我的应用程序可以在所有硬件上运行并获得最佳性能?
c# - 更好的 PixelFormat.ToString 输出
System.Drawing.Imaging 命名空间中的PixelFormat枚举具有Format32bppArgb或Format8bppIndexed等成员,这些成员在调用其ToString方法时会显示。
您是否知道将 PixelFormat 值转换为更适合在图形程序中显示的字符串的内置方法或其他方法,例如24 BPP或24bpp?
opengl-es - 透明 EAGLView 的 fps 大幅下降
我有一个 Cocos2d 项目,我想在整个应用程序中保持不变的背景。在applicationDidFinishLaunching
其委托的方法中,我替换了以下行:
我已将 glView 的 pixelFormat 从更改kEAGLColorFormatRGB565
为kEAGLColorFormatRGBA8
. 当我进行更改时,glView 变得透明并且我可以看穿它,但是 fps 急剧下降。如果我不进行更改,则视图不会变得透明,但我看不到 fps 的大幅下降。我说的是 fps 的显着下降,从 59.0-60.0 下降到大约 35.0-42.0。
我在上面的 addSubview 行下方使用此代码来使视图透明:
整个 applicationDidFinishLaunching 方法如下所示:
关于为什么会发生这种情况的任何想法?如果需要,我可以提供更多代码。
我忘了提及我所做的另一项代码更改。在 CCDirector.m 中setGLDefaultValues
,我更改了这一行:
对此:
python - 新的 pygame 表面是否必须进行 .convert() 处理?
当你创建一个新的 Pygame 表面时:
您是否必须调用.convert()
它来更改其像素格式,或者在您创建它时已经为您完成了?
textures - Ogre3D 中的立方体纹理和像素格式
在 Ogre 材质文件中,立方体纹理定义为:
这是否意味着无法像普通纹理那样设置像素格式?
wpf - 来自文件 PixelFormat 的 BitmapImage 始终为 bgr32
我正在使用以下代码从文件中加载图像:
它按预期工作,除了无论我加载哪种图像(24 位 RGB、8 位灰色、12 位灰色……),在 .EndInit() 之后,BitmapImage 始终具有格式 bgr32。我知道网上有讨论,但我没有找到任何解决这个问题的方法。你们有谁知道它是否已经解决了?
谢谢,
塔比纳
wpf - BitmapSource 中的 BitmapImage 始终为 Bgr32
我正在从 BitmapSource 加载 BitmapImage,我总是发现 BitmapImage 的格式是 Bgr32 而不是 BitmapSource 的 Bgra32。这里有一个类似的线程: BitmapImage from file PixelFormat always is bgr32
但是正如线程中所建议的那样,使用 BitmapCreateOptions.PreservePixelFormat 对我不起作用。这就是我正在做的事情:
有没有办法从 BitmapSource 创建 BitmapImage 并保留 alpha 通道?
更新: 我使用另一个线程中发布的相同代码从文件加载 testbmp2.bmp,加载后,Format 属性为 Bgr32。
所以也许我没有正确保存 FileStream/MemoryStream?这似乎不对,因为在保存 FileStream 后,我可以在 Photoshop 中打开 testbmp2.bmp 并查看 alpha 通道。
更新 2: 我认为我需要重新表述我遇到的问题。我正在尝试显示纹理的单独通道。我通过图像控件显示位图。我有一个简单的 HLSL 预编译着色器分配给图像的效果属性,它将屏蔽基于通道的用户输入。在保留 alpha 通道的同时无法将 BitmapSource 转换为 BitmapImage 只是问题的一部分。我现在意识到,由于我原来的 BitmapSource 格式是 Bgra32,我可以将它直接分配给 Image 的 Source 属性。问题似乎是 Image 对象只会显示带有预乘 alpha 的纹素......?这是我的着色器代码:
我已经对其进行了广泛的测试,并且我很确定它正确设置了 outCol 值。当我传入 (1.0, 1.0, 1.0, 0.0) 的通道掩码值时,显示的图像是 RGB 通道,其中黑色的 alpha 区域绘制为黑色 - 正如您所期望的那样,如果 WPF 预乘 alpha到 RGB 通道。有谁知道在没有预乘 alpha 的情况下在图像中显示 BitmapSource 的任何方法?或者更重要的是,有没有办法让效果在 alpha 预乘发生之前接收纹理?我不确定事情是按什么顺序完成的,但显然预乘发生在纹理写入 s0 寄存器并且着色器开始处理它之前。
c# - 为什么我在创建 TIFF 时在我的服务器上收到异常?
我只在我的 Windows Server Datacenter 2007 SP 2 服务器上收到异常,而不是在我的本地 Windows 7 PC 上。
我已将有问题的调用包装在 a 中try-catch-finally
,以便程序的其余部分可以正常执行。
如何解决异常并在服务器上正确生成 TIFF?
例外:
抛出异常的代码行:
相关代码:
android - SurfaceView PixelFormat 混淆
如果有人可以帮助我解决 SurfaceView PixelFormat 问题,我将不胜感激。我知道 RGBA8888 质量最好,但我也需要性能。我知道 RGBA4444 已被弃用,但目前它最适合我的质量和性能需求。我有透明的位图,当我将 SurfaceView PixelFormat 设置为 RGBA4444 时,它不起作用 - 没有错误,什么都没有,位图根本不存在。如果我将其设置为 RGBA8888 或 TRANSPARENT,则一切正常。
我需要 RGBA4444 才能工作 - 为什么它不起作用,后台发生了什么?在后台没有其他有趣的事情发生 - 只是简单的 SurfaceView 和在 surfaceCreated 方法中绘制的画布。
谢谢!
PS 已尝试使用所有可能的位图变体:32 位、16 位、8 位等。