问题标签 [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.
c++ - 未知像素格式错误 SDL2
我一直在从事 SDL 的一个项目,并将问题缩小到 NULL 的表面。表面初始化如下:
它打印“表面错误未知像素格式”。我假设它指的是 SDL_CreateRGBSurface 函数中的最后四个参数,但我不知道可能导致什么。谷歌一直……没有帮助。所以我转向你。
ffmpeg - ffmpeg libavcodec AVPixelFormat for png
我应该为 *.png(PNG-24 和 PNG-8)图像使用什么AvPixelFormat ?我正在尝试使用 sws_scale 从 png 转换为 PIX_FMT_YUV420P
编辑,代码:
Jpeg 像素格式是 AV_PIX_FMT_YUVJ420P,但是 PNG 是什么格式呢?
c++ - 某些机器上的 OpenGL 中的黑屏(PIXELFORMATDESCRIPTOR/SwapBuffer?)
我编写了一个 OpenGL 应用程序,它会在某些机器上崩溃(在我自己的测试机器上它运行:Windows 8、Windows 7、Windows Vista (x86) - 但在一些装有 Windows Vista (x86) 的客户端机器上它会崩溃) - 我还不知道究竟为什么,但我将应用程序降级为一个空骨架,这将只是glClear()
. 然后应用程序运行至少没有崩溃(可以创建OpenGL上下文,可以加载glew),但是屏幕没有以指定的glClearColor
颜色清除。我怀疑我的一些问题PIXELFORMATDESCRIPTOR
或SwapBuffer
在那里没有按预期工作。
我的代码(为了简单起见,我省略了 Windows 的创建main()
):
此代码输出:“状态:使用 GLEW 1.10.0”然后我的主循环:
在我自己的机器上,我收到一个灰屏(如预期的那样) - 但在我的原始程序崩溃的机器上,屏幕只是黑色的(但没有出现任何消息框,输出也是:“状态:使用 GLEW 1.10.0 ”)。所以我看不到任何错误的证据 - 但输出不同并且glClearColor()
似乎被忽略了。
关于如何进一步解决这个问题的任何想法?
c# - 为什么 Bitmap(Image) 构造函数会更改 PixelFormat?
这段代码:
产生这个输出:
bpp24 像素格式为 Format24bppRgb
bpp24image 像素格式为 Format24bppRgb
重复像素格式为 Format32bppArgb
克隆像素格式为 Format24bppRgb
为什么重复的 PixelFormat 发生了变化?真正复制 Bitmap 的解决方法似乎是最后显示的对象级 Clone 方法(和 Bitmap 级 Clone 方法,但这需要一些额外的输入),但为什么更高级别的 Bitmap(Image) 构造函数不能用于复制位图?
另请参阅Bitmap deep copy changed PixelFormat和Converting Bitmap PixelFormats in C#。
android - Android 显示视图缓冲区
我正在开发一个 android 应用程序,我需要将应用程序视图缓冲区发送到 android (native) c 文件。目前正在通过创建显示视图的位图然后制作其缓冲区并将其传递给本机(.c)文件来做到这一点。一件重要的事情是我需要这个 RGBA_4444 格式的视图缓冲区。请通过将显示视图转换为像素格式 RGBA_4444 并在不使用位图的情况下制作其缓冲区来帮助我做到这一点。
我当前的代码
c# - 将 BGR 打包到 RGB 平面像素格式的更快转换
从 SDK 中,我得到了像素格式 BGR 打包的图像,即BGRBGRBGR
. 对于另一个应用程序,我需要将此格式转换为 RGB 平面RRRGGGBBB
。
我正在使用 C# .NET 4.5 32bit 并且数据位于具有相同大小的字节数组中。
现在我正在遍历数组源并将BGR
值分配到目标数组中的适当位置,但这需要太长时间(对于 1.3 百万像素的图像需要 180 毫秒)。运行代码的处理器可以访问 MMX、SSE、SSE2、SSE3、SSSE3。
有没有办法加快转换速度?
编辑:这是我正在使用的转换:
编辑:我尝试将源数组的访问分成三个循环,每个通道一个,但它并没有真正帮助。所以我愿意接受建议。
Bump 因为这个问题仍然没有答案。任何建议都非常感谢!
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# 文件:
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。
c# - 如何将具有多种像素格式的多页 tiff 保存为单个像素格式?
我需要检测多页 tiff 的页面像素格式,如果不是,则更改它们PixelFormat.Format24bppRgb
。通常这对我来说很简单。出于同样的原因,我需要进行转换,我似乎在想出一个理想的解决方案时遇到了问题。
如果图像的活动框架是PixelFormat.Format1bppIndexed
,然后我尝试更改为具有的框架,PixelFormat.Format24bppRgb
则会WorkingImage.SelectActiveFrame(FrameDimension.Page, i);
引发异常。
System.Drawing.dll 中出现“System.Runtime.InteropServices.ExternalException”类型的未处理异常
附加信息:GDI+ 中出现一般错误。
我想我可以捕获异常并重新打开图像/图像流并继续检查,但我希望这不是我唯一的选择。
很感谢任何形式的帮助!