【问题标题】:I get the image reversed in C#我在 C# 中反转了图像
【发布时间】:2010-10-19 02:04:57
【问题描述】:

这是我将 byte[] 数组转换为图像的代码

unsafe
{
  //convert the UInt32[] into byte array and then assign the pointer to it
  fixed (byte* ptr = Misc.ConvertFromUInt32Array(image)) 
  {
    Bitmap bmp = new Bitmap(200,64,800,
      PixelFormat.Format32bppRgb,
      new IntPtr(ptr));
    bmp.Save("test.bmp");
  }
}

我明白了:

alt text http:////img11.imageshack.us/img11/4853/testacr.png

代码中的问题在哪里,为什么会这样?怎样才能恢复正常?

【问题讨论】:

  • 你只能有一张图片...如果必须选择,请显示反向的。
  • Misc.ConvertFromUInt32Array(image) 内部发生了什么?难道问题不是在那里发生而不是保存图像的一点点代码?

标签: c# bitmap flip


【解决方案1】:

嘿,您发布的两张图片看起来没有任何关系(除了有类似的混淆模式)。你发错文件了吗?

关于您看到的问题,我猜您看到的是 x-y 轴原点的问题。普通图像和图形 API 使用一个稍微奇怪的轴,您在 y 轴“向下”计数,也就是说,point(0, 0) 位于屏幕的左上角,当您增加 y 时,您向下屏幕。因此,假设您在转换过程中犯了错误或这两个图像使用不同的 y 轴方案似乎是合理的。

【讨论】:

  • 不,我不这么认为。问题必须在“bmp”行,有人说问题在大步前进(参数应该是负数),但它不存在。
  • 您说的是哪条“bmp”行? “Stride”位于包含“bmp”的行之一
【解决方案2】:
   bmp.RotateFlip(RotateFlipType.Rotate180FlipX);

解决了问题:)

【讨论】:

  • 我们应得的英雄
【解决方案3】:

为什么不将所有不安全的东西替换为:

private static Bitmap ConvertFromBytes(Byte[] imagebytes)
{
   return new Bitmap(new MemoryStream(imagebytes));
}

【讨论】:

  • 因为 imageBytes 不包含位图头。
猜你喜欢
  • 1970-01-01
  • 2016-01-06
  • 2021-03-16
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 2018-05-03
相关资源
最近更新 更多