二个问题,第一个:如何把一个Color对象转换成Uint(非托管代码使用)类型?第二个:如何把一个流对象转换成Uint类型

johnage 2005-09-23 02:22:40
本人在DotNet中使用了第三方控件其中Uint类型,据.Net帮助中描述,Uint对应.Net中int类型,原本就可直接转换,为什么转换后的值与结果为什么会不同?int -2,147,483,648 到 2,147,483,647 有符号 32 位整数 uint 0 到 4,294,967,295 无符号 32 位整数 哪之间转换是不是有特殊的方式
第一个问题:
通过一个
Color.FromArgb(210,210,210).ToArgb()获取一个RGB值(RGB是灰色)并直接转换成((uint)Color.FromArgb(210,210,210).ToArgb())uint类型,显示的结果是暗红色。我该如何用正确的转换成uint值?
第二个:
byte[] MyData = wfd.FlowImage;//这是个大对象 MyData决对有值,
MyData是个byte[]类型,MyData如何转换Uint类型。
...全文
446 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
pupo 2005-09-23
  • 打赏
  • 举报
回复
byte[] MyData = wfd.FlowImage;
System.RuntimeTypeHandle handle = Type.GetTypeHandle(MyData);
MessageBox.Show(handle.Value.ToInt32().ToString());

或者直接取wfd.FlowImage对象的句柄
System.RuntimeTypeHandle handle = Type.GetTypeHandle(wfd.FlowImage);
MessageBox.Show(handle.Value.ToInt32().ToString());
johnage 2005-09-23
  • 打赏
  • 举报
回复
分不够我在加
johnage 2005-09-23
  • 打赏
  • 举报
回复
int HMem = wfd.HMem 这个是没有的我仔细看了好几遍了
johnage 2005-09-23
  • 打赏
  • 举报
回复
大侠你总算是来了,是的我想得到wfd.FlowImage句柄
wuyi8808 2005-09-23
  • 打赏
  • 举报
回复
byte [] MyData = wfd.FlowImage;//一个大对象
---------------------------------

一个大对象的句柄无法从 byte [] MyData 得到,你看一下是否有:int HMem = wfd.HMem 这个属性。
pupo 2005-09-23
  • 打赏
  • 举报
回复
你要的是wfd.FlowImage这个对象的句丙吧??
johnage 2005-09-23
  • 打赏
  • 举报
回复
自己顶
johnage 2005-09-23
  • 打赏
  • 举报
回复
to: wuyi8808(tm) studio   :), flygoldfish(长江支流) , pupo(泡泡) 各位大侠别走啊。这个问题当住我一天了。急
johnage 2005-09-23
  • 打赏
  • 举报
回复
我想把一个大对象byte[] MyData = wfd.FlowImage;//这是个大对象 MyData决对有值
转换成int,在第三方控件中flow.LoadMemory(int HMem)方法中HMem这个参数是一个大对象的句柄才对是不是?。哪byte[] MyData 这个对象的句柄是多少了?
pupo 2005-09-23
  • 打赏
  • 举报
回复
BitConverter.ToInt32 方法 [Visual Basic]请参见

返回由字节数组中指定位置的四个字节转换来的 32 位有符号整数。
pupo 2005-09-23
  • 打赏
  • 举报
回复
很多转换是需要有条件的,并不是想怎么转就怎么转的.主要看你的MyData符不符合转换条件.
字节转成int32就是用BitConverter.ToInt32这个方法的
johnage 2005-09-23
  • 打赏
  • 举报
回复
分不是问题我一会就给,在这里谢谢各位同仁
johnage 2005-09-23
  • 打赏
  • 举报
回复
Sorry,我看错了应该MyData转换成int类型。BitConverter.ToInt32(MyData,MyData.Length)这个行不通
长江支流 2005-09-23
  • 打赏
  • 举报
回复
哈哈,可以取一大半的分了,我用Excel时就遇到这个问题,下一句就OK了
_xlRange.Font.Color = System.Drawing.ColorTranslator.ToOle(_excelFont.ForeColor);

其它的转换楼主可以试试类似方法





下面是我试验的其它过程,当时也苦啊,希望朋友们遇到类似问题时不再这么苦了:)


//读者在这要注意:在这需要一个转换的过程,我试了好长时间。
//经过反向读取单格的颜色,发现返回的是double型
//_xlRange.Font.Color = new byte[]{color.R,color.G,color.B}; //color.ToArgb();
//_xlRange.Font.Color = Convert.ToInt32(color.ToArgb()); //用此种后,蓝红颠倒了,绿色正好不变

if (!_excelFont.ForeColor.IsEmpty)
{
_xlRange.Font.Color = System.Drawing.ColorTranslator.ToOle(_excelFont.ForeColor);
}

// if (!_excelFont.Background.IsEmpty)
// {
// _xlRange.Font.Background = System.Drawing.ColorTranslator.ToOle(_excelFont.Background);
// }
wuyi8808 2005-09-23
  • 打赏
  • 举报
回复
uint [] n = new uint[MyData.Length / 4];
for (int i = 0; i < MyData.Length / 4; i++)
{
n[i] = BitConverter.ToUInt32(MyData, i*4);
}
wuyi8808 2005-09-23
  • 打赏
  • 举报
回复
那怎么可以转换成一个 uint?
johnage 2005-09-23
  • 打赏
  • 举报
回复
MyData有{Length=1571}
wuyi8808 2005-09-23
  • 打赏
  • 举报
回复
uint n = BitConverter.ToUInt32(MyData , 0);
wuyi8808 2005-09-23
  • 打赏
  • 举报
回复
byte[] MyData = wfd.FlowImage;//这是个大对象 MyData决对有值,
--------------------------------
这个长度是多少,是4个字节吗?(MyData.Lentgh == 4) 成立否?
johnage 2005-09-23
  • 打赏
  • 举报
回复
先谢谢二位回贴。to:pupo(泡泡) 第一个问题你说得很对。但第二个问题又如何解决呢?
加载更多回复(3)

110,536

社区成员

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

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

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