问题标签 [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.

0 投票
2 回答
2990 浏览

c++ - 未知像素格式错误 SDL2

我一直在从事 SDL 的一个项目,并将问题缩小到 NULL 的表面。表面初始化如下:

它打印“表面错误未知像素格式”。我假设它指的是 SDL_CreateRGBSurface 函数中的最后四个参数,但我不知道可能导致什么。谷歌一直……没有帮助。所以我转向你。

0 投票
1 回答
1599 浏览

ffmpeg - ffmpeg libavcodec AVPixelFormat for png

我应该为 *.png(PNG-24 和 PNG-8)图像使用什么AvPixelFormat ?我正在尝试使用 sws_scale 从 png 转换为 PIX_FMT_YUV420P

编辑,代码:

Jpeg 像素格式是 AV_PIX_FMT_YUVJ420P,但是 PNG 是什么格式呢?

0 投票
0 回答
230 浏览

c# - 如何在 foreach 循环中跳过具有无效 PixelFormat 的文件?

我有一个简单的程序,它遍历图像列表,检查图像的宽度和高度,然后根据结果将它们移动到指定的文件夹。我Image.FromFile(path)用来检查图像,一旦它击中特定图像,我会得到一个OutOfMemoryException.

此错误的潜在原因已在此处讨论

我确定错误的原因,它击中的一些 TIFF 图像(出于某种荒谬的原因!)的位深度为 40,这不是有效的 GDI+ 像素格式,此处供参考。

我可以用 try-catch ( OutOfMemoryException) 解决这个问题,但我会检查图像是否有有效的像素格式,而不是希望我不会因为任何其他原因而出现异常。

0 投票
1 回答
896 浏览

c++ - 某些机器上的 OpenGL 中的黑屏(PIXELFORMATDESCRIPTOR/SwapBuffer?)

我编写了一个 OpenGL 应用程序,它会在某些机器上崩溃(在我自己的测试机器上它运行:Windows 8、Windows 7、Windows Vista (x86) - 但在一些装有 Windows Vista (x86) 的客户端机器上它会崩溃) - 我还不知道究竟为什么,但我将应用程序降级为一个空骨架,这将只是glClear(). 然后应用程序运行至少没有崩溃(可以创建OpenGL上下文,可以加载glew),但是屏幕没有以指定的glClearColor颜色清除。我怀疑我的一些问题PIXELFORMATDESCRIPTORSwapBuffer在那里没有按预期工作。

我的代码(为了简单起见,我省略了 Windows 的创建main()):

此代码输出:“状态:使用 GLEW 1.10.0”然后我的主循环:

在我自己的机器上,我收到一个灰屏(如预期的那样) - 但在我的原始程序崩溃的机器上,屏幕只是黑色的(但没有出现任何消​​息框,输出也是:“状态:使用 GLEW 1.10.0 ”)。所以我看不到任何错误的证据 - 但输出不同并且glClearColor()似乎被忽略了。

关于如何进一步解决这个问题的任何想法?

0 投票
0 回答
1763 浏览

c# - 为什么 Bitmap(Image) 构造函数会更改 PixelFormat?

这段代码:

产生这个输出:

bpp24 像素格式为 Format24bppRgb

bpp24image 像素格式为 Format24bppRgb

重复像素格式为 Format32bppArgb

克隆像素格式为 Format24bppRgb

为什么重复的 PixelFormat 发生了变化?真正复制 Bitmap 的解决方法似乎是最后显示的对象级 Clone 方法(和 Bitmap 级 Clone 方法,但这需要一些额外的输入),但为什么更高级别的 Bitmap(Image) 构造函数不能用于复制位图?

另请参阅Bitmap deep copy changed PixelFormatConverting Bitmap PixelFormats in C#

0 投票
0 回答
323 浏览

android - Android 显示视图缓冲区

我正在开发一个 android 应用程序,我需要将应用程序视图缓冲区发送到 android (native) c 文件。目前正在通过创建显示视图的位图然后制作其缓冲区并将其传递给本机(.c)文件来做到这一点。一件重要的事情是我需要这个 RGBA_4444 格式的视图缓冲区。请通过将显示视图转换为像素格式 RGBA_4444 并在不使用位图的情况下制作其缓冲区来帮助我做到这一点。

我当前的代码

0 投票
2 回答
1852 浏览

c# - 将 BGR 打包到 RGB 平面像素格式的更快转换

从 SDK 中,我得到了像素格式 BGR 打包的图像,即BGRBGRBGR. 对于另一个应用程序,我需要将此格式转换为 RGB 平面RRRGGGBBB

我正在使用 C# .NET 4.5 32bit 并且数据位于具有相同大小的字节数组中。

现在我正在遍历数组源并将BGR值分配到目标数组中的适当位置,但这需要太长时间(对于 1.3 百万像素的图像需要 180 毫秒)。运行代码的处理器可以访问 MMX、SSE、SSE2、SSE3、SSSE3。

有没有办法加快转换速度?

编辑:这是我正在使用的转换:

编辑:我尝试将源数组的访问分成三个循环,每个通道一个,但它并没有真正帮助。所以我愿意接受建议。

Bump 因为这个问题仍然没有答案。任何建议都非常感谢!

0 投票
4 回答
1930 浏览

c# - 加快像素格式转换 - BGR 打包为 RGB 平面

从 SDK 中,我得到了像素格式 BGR 打包的图像,即BGRBGRBGR. 对于另一个应用程序,我需要将此格式转换为 RGB 平面RRRGGGBBB。我不想只为这个任务使用额外的库,所以我必须使用自己的代码在格式之间进行转换。

我正在使用 C# .NET 4.5 32bit 并且数据位于具有相同大小的字节数组中。

现在我正在遍历数组源并将 BGR 值分配到目标数组中的适当位置,但这需要太长时间(1.3 兆像素图像需要 250 毫秒)。运行代码的处理器是 Intel Atom E680,可以访问 MMX、SSE、SSE2、SSE3、SSSE3。

不幸的是,我不了解内在函数,也无法将代码转换为类似问题的代码,例如快速方法通过翻译复制内存 - ARGB 到 BGR以满足我的需要。

我目前用来在像素格式之间转换的代码是:

我尝试将源数组的访问分成三个循环,每个通道一个,但这并没有真正帮助。所以我愿意接受建议。

编辑:通过像这样删除除法和乘法,我把它降低到 180 毫秒,但是有没有办法让它更快?我猜它仍然很慢,因为内存读/写不是非常理想。

感谢 MBo 的回答,我能够将时间从 180 毫秒减少到 90 毫秒!这是代码:

转换器.cpp:

C# 文件:

0 投票
2 回答
2805 浏览

wpf - 使用硬件在 DeckLink 上将 YUV 转换为 RGB

我目前正在通过 DeckLink 4K Extreme 上的 HDMI 输入从摄像机以 59.94 FPS 的速度摄取 HD1080p 视频。

我的目标是在 WPF UI 元素中复制传入的图像。为此,我在 C# WPF 应用程序中使用了 DeckLink SDK。

在这个程序中,我实现了 VideoInputFrameArrived 回调。在这个回调中,我将每个帧中的字节复制到一个 WriteableBitmap 中,我已将其设置为图像的源。

所有这些都可以正常工作,当我运行程序时,图像确实会在帧到达时实时更新。

那么我的问题是,视频输入中仅有的两种受支持的像素格式是 8BitYUV 和 10BitYUV,这两种格式都不能在计算机显示器上原生显示。

WriteableBitmap 只能接受各种 RGB、黑白和 CMYK 格式。

这是我到目前为止所尝试的。


我尝试使用 IDeckLinkVideoConversion::ConvertFrame() 转换每一帧

问题:ConvertFrame() 需要使用 IDeckLinkOutput::CreateVideoFrame() 在 DeckLink 上渲染目标帧。据我目前了解,DeckLink 不能同时充当输入(捕获视频源)和输出(渲染目标帧)。


我已将传入流设置为 8BitYUV,并将每一帧复制到格式为 BGR32 的 WriteableBitmap 中。

问题:正如我之前提到的,这将显示一个图像,但颜色不正确,并且图片只有它需要的一半宽度。

原因是 8BitYUV 的传入流是 16 位/像素,而位图需要 32 位/像素,因此位图将每个传入的 MacroPixel(4 字节)视为一个像素,而不是实际的 2 个像素。


目前我正在使用像素着色器来修复颜色,并使用 RenderTransform 将图像水平缩放 2 倍以“修复”纵横比。问题是我有一半的原始分辨率。

我不认为这是硬件限制,因为当我将另一台显示器连接到 DeckLink 上的 HDMI 输出时,传入的图像会以完美的色彩以全 1080p 显示。是否有可能在内存中的某处捕获该传出流?

TL;DR 将 4:2:2 YUV (UYVY) 实时转换为 RGB 或 CMYK 像素格式的最佳方法是什么?(1080p @ 59.94 FPS)

最好是硬件解决方案,即 DeckLink 或 GPU。

0 投票
1 回答
690 浏览

c# - 如何将具有多种像素格式的多页 tiff 保存为单个像素格式?

我需要检测多页 tiff 的页面像素格式,如果不是,则更改它们PixelFormat.Format24bppRgb。通常这对我来说很简单。出于同样的原因,我需要进行转换,我似乎在想出一个理想的解决方案时遇到了问题。

如果图像的活动框架是PixelFormat.Format1bppIndexed,然后我尝试更改为具有的框架,PixelFormat.Format24bppRgb则会WorkingImage.SelectActiveFrame(FrameDimension.Page, i);引发异常。

System.Drawing.dll 中出现“System.Runtime.InteropServices.ExternalException”类型的未处理异常

附加信息:GDI+ 中出现一般错误。

我想我可以捕获异常并重新打开图像/图像流并继续检查,但我希望这不是我唯一的选择。

很感谢任何形式的帮助!