image转byte【】出现图片颜色异常

newmission 2010-02-22 10:19:52
我试图将一个Image转成byte【】然后写入Dicom标准的文件,可是显示出的文件红色调变成了蓝色调,代码如下:
class ImageToByteArrayConverter
{
private ushort _width;
private ushort _height;

public byte[] ToByteArray(String Path)
{
Image img = Image.FromFile(Path);
Bitmap bmp = new Bitmap(img);
_height =(ushort) bmp.Height;
_width = (ushort) bmp.Width;
BitmapData bitmapData = bmp.LockBits(new Rectangle(new Point(0, 0), img.Size), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

byte[] BGRValues = new byte[bitmapData.Stride * bitmapData.Height];

IntPtr Ptr = bitmapData.Scan0;
System.Runtime.InteropServices.Marshal.Copy(Ptr, BGRValues, 0, BGRValues.Length);

bmp.UnlockBits(bitmapData);

return BGRValues;
}
public ushort BmpWidth
{
get
{
return _width;
}
}
public ushort BmpHeight
{
get
{
return _height;
}

}
}

希望各位大侠帮个忙,先谢了。
...全文
266 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
newmission 2010-02-22
  • 打赏
  • 举报
回复
谢谢zhke大侠,问题已经解决。加了一段代码,如下:
for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
Color color = bmp.GetPixel(x, y);
bmp.SetPixel(x, y, Color.FromArgb(color.B, color.G, color.R));
}
}
  • 打赏
  • 举报
回复
直接遍历bmp的所有点,取出每个点的颜色来进行转换吧。
  • 打赏
  • 举报
回复
在net里玩指针,大多数人都会“死”得很惨的。

你的这个根本不需要玩指针。
zgke 2010-02-22
  • 打赏
  • 举报
回复
24位图 使用Marshal.Copy获取到的数据为

byte[]{ B G R B G R...}

你可能需要自己反转下RGB的数据

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧