有段指针操作的代码看不太明白求解释

runerback 2016-04-19 03:56:36
有个从BitmapData中读出来的指针,指向图像数据的第一个地址,然后在循环中进行的操作貌似“什么作用都没有”,很疑惑。

void* ptr = bitmapData.Scan0.ToPointer();
for (int i = 0; i < bitmapData.Stride / 4; i++)
{
for (int j = 0; j < bitmapData.Height; j++)
{
ARGB* ptr2 = (ARGB*)((bitmapData.Stride * j / 4 + i) * 4 + (byte*)ptr);
ARGB* expr_E2 = ptr2;
std.swap<char>(expr_E2, expr_E2 + 3 / sizeof(ARGB));
std.swap<char>(ptr2 + 1 / sizeof(ARGB), ptr2 + 2 / sizeof(ARGB));
}
}

这个循环的含义简单说一下
比如有个图片数据格式是这样:
①0000 ③0000 ⑤0000
②0000 ④0000 ⑥0000
这个循环就按照上面的序号取地址,然后把4bytes 的数据放到ARGB这个结构中
ARGB是一个顺序存放数据、大小为4的结构体
所以上面的“3 / sizeof(ARGB)”、“1 / sizeof(ARGB)”这些就等于0了,然后“std.swap”不就相当于没作用了?

反编译一个VC.Net程序集看到的,求不喷。。

...全文
164 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
runerback 2016-04-22
  • 打赏
  • 举报
回复
引用 6 楼 shingoscar 的回复:
根本不能编译 public unsafe static extern void swap<char>(sbyte*, sbyte*); 错误 3 类型参数声明必须是标识符,不能是类型
好吧,那果然就是ILSpy的问题了。
Poopaye 2016-04-20
  • 打赏
  • 举报
回复
根本不能编译 public unsafe static extern void swap<char>(sbyte*, sbyte*); 错误 3 类型参数声明必须是标识符,不能是类型
runerback 2016-04-19
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
引用
std.swap<char>
怎么会是char???
这个方法的签名是这样的:

[SuppressUnmanagedCodeSecurity]
[MethodImpl(MethodImplOptions.Unmanaged | MethodImplOptions.PreserveSig)]
public unsafe static extern void swap<char>(sbyte*, sbyte*);
runerback 2016-04-19
  • 打赏
  • 举报
回复
引用 1 楼 wjfwd2010 的回复:
看那么细干嘛,累不累
事关解出游戏里flash文件格式然后修改之再愉快地玩耍啊……
wanghui0380 2016-04-19
  • 打赏
  • 举报
回复
你说0就没做事情,那么我们说不是0,他做事情没有。数据如此就如此,逻辑没错就成
Poopaye 2016-04-19
  • 打赏
  • 举报
回复
引用
std.swap<char>
怎么会是char???
风吹腚腚凉 2016-04-19
  • 打赏
  • 举报
回复
差不多就是对图像进行处理,计算。看那么细干嘛,累不累,类似PS的一些什么模糊化的功能吧,要么就是图形优化。

111,129

社区成员

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

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

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