- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我尝试从位图 (System.Drawing.Bitmap) 中获取所有字节值。因此我锁定字节并复制它们:
public static byte[] GetPixels(Bitmap bitmap){
if(bitmap-PixelFormat.Equals(PixelFormat.Format32.bppArgb)){
var argbData = new byte[bitmap.Width*bitmap.Height*4];
var bd = bitmap.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat);
System.Runtime.InteropServices.Marshal.Copy(bd.Scan0, argbData, 0, bitmap.Width * bitmap.Height * 4);
bitmap.UnlockBits(bd);
}
}
我使用在 Photoshop 中创建的具有像素(红色、绿色、蓝色、白色)的非常简单的 2x2 PNG 图像测试了此图像。由于格式原因,我希望 argbData 中包含以下值:
255 255 0 0 255 0 255 0
255 0 0 255 255 255 255 255
但是我得到了:
0 0 255 255 0 255 0 255
255 0 0 255 255 255 255 255
但这是 BGRA 格式。有人知道为什么字节似乎被交换了吗?顺便说一下,当我直接将图像用于 Image.Source 时,如下所示,图像显示正确。那么我的错是什么?
<Image Source="D:/tmp/test2.png"/>
最佳答案
像素数据是ARGB,1个字节用于alpha,1个用于红色,1个用于绿色,1个用于蓝色。 Alpha 是最重要的字节,蓝色是最不重要的。在小端机器上,就像你的和许多其他机器一样,小端先存储,所以字节顺序是 bb gg rr aa。所以 0 0 255 255 等于蓝色 = 0,绿色 = 0,红色 = 255,alpha = 255。那是红色。
当您将 bd.Scan0 转换为 int*(指向整数的指针)时,这种字节顺序细节会消失,因为整数也存储为小字节序。
关于c# - PixelFormat.Format32bppArgb 似乎有错误的字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8104461/
如何从 PixelFormat 获取像素长度(以字节为单位)枚举?我想使用 native 方法处理图像像素,但如果我不知道像素的偏移量,我该如何遍历图像。 代码: let formRgbCube (i
正如标题所说,有人知道什么是RGBX_8888像素格式吗?和 RGBA_8888 有什么区别? RGBA_8888 是否提供 alpha channel 但 RGBX_8888 不提供? 不幸的是,A
我对 PixelFormat 感到困惑在安卓系统上。 我的设备是摩托罗拉 Defy。 我有两个问题: 在 Android 2.3 上 getWindowManager().getDefaultDisp
我尝试从位图 (System.Drawing.Bitmap) 中获取所有字节值。因此我锁定字节并复制它们: public static byte[] GetPixels(Bitmap bitmap){
我知道这听起来微不足道,但我目前陷入困境。 我有各种格式的图像作为输入。 Gray16、Gray8、Indexed8 等。我需要的是将它们转换为 RGB24 格式,到目前为止我已经做到了 public
Accord.NET PointsMarker.cs似乎支持 PixelFormat Format32bppArgb。为什么这会捕获 UnsupportedImageFormatException?
我正在尝试使用 pictureBox->Image (Windows Forms) 来显示 cv::Mat 图像 (openCV)。我想这样做而不将图像保存为文件(因为我想每 100 毫秒重置一次图像
我正在使用以下方法将 BitmapSource 转换为 Bitmap: internal static Bitmap ConvertBitmapSourceToBitmap(BitmapSource
我们的目标是用来自 Kinect 的红外图像制作一部电影。我们正在使用 AForge videowriter,我们已经有了处理普通 RGB 流的工作代码。 (RgbResolution640x480F
我正在尝试使用该函数设置渲染格式 CCTexture2D.setDefaultAlphaPixelFormat(Bitmap.Config.ARGB_8888); 但它给我一个错误 找不到符号方法 s
有没有办法从 PixelFormat 类型的 codecContext.pix_fmt 中获取像素的位数?我使用开关手动完成: switch (OUT_IMAGE_FORMAT) { case
考虑以下设置:我在磁盘上有一些图像。我无法修改这些图像,因为它们属于另一个项目。我刚读完。 我需要对它们进行处理以使其在我的应用中看起来最佳。我的意思是像素着色器已处理。当我完成处理后,输出图像将用作
我发现更改 SurfaceView 中的像素格式对帧速率有很大影响。但是,我似乎无法找到一种方法来根据每个设备选择最佳格式。 例子: @Override public void surfaceCrea
我需要以原始 bpp 格式处理和保存图像(1 - BnW,8 - 灰色,24 - 彩色)。处理后我总是有 24bpp(由于使用 Aforge.Net 处理)。我将原始 bpp 传递给保存函数,我正在使
我目前正在使用 C# 进行一些图像处理,我对 Bgr32 像素格式感到困惑。以下说明来自microsoft msdn:http://msdn.microsoft.com/en-us/library/s
我正在寻找渲染 DrawingVisual (示例中的可视化)使用 RenderTargetBitmap 到位图使用 View 将此位图设置为 Canvas 的背景如下: var bmp = new
在System.Drawing中,我们从Image对象中检索PixelFormat,但SkiaSharp.SkImage不提供API来查找解码图像的PixelFormat。是否有任何其他解决方法来查找
我正在尝试在 AVCaptureConnection 上设置像素格式类型,但它会终止所有 RGB 设置,但适用于 kCVPixelFormatType_32BGRA。 Terminating app
我有一个具有以下 View 结构的游戏应用程序。首先,我有一个空的 FrameLayout,如下所示: FrameLayout game_frame_layout = new FrameLayout(
我想使用函数 CGDisplayStreamCreateWithDispatchQueue。 文档告诉我为“pixelFormat”使用以下可能的值:(参数需要是一个Int32) The desire
我是一名优秀的程序员,十分优秀!