如何检测一个byte[]流是Image格式还是icon格式?偶摸索了好几天了,难啊!

拼命三朗 2006-12-02 04:06:56
如何检测一个byte[]流是Image格式还是icon格式?
还有如何检测一个System.Drawing.Image对象是Image(BitMap)格式还是ICON格式?
上述目的在于,向SQL2000存取图像时是使用
对象.Image=New System.Drawing.Icon(imgStream, 16, 16)
还是
对象.Image = System.Drawing.Image.FromStream(imgStream)

imgStream为byte流

...全文
312 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
gameboy766 2006-12-06
  • 打赏
  • 举报
回复
学习
北京的雾霾天 2006-12-05
  • 打赏
  • 举报
回复
你分开Icon和Image处理的思路是对的.但是没有必要把这两种格式的数据存放到两个字段,一个就可以了,当把Icon或Image存到数据库的时候,可以存它的byte[],读出的时候用ImageConverter和IconConverter来转换,只要转换后不是null就可以了.就像上面的我的回复中说的.
拼命三朗 2006-12-05
  • 打赏
  • 举报
回复
我现在的解决办法是,自定义一个继承于Picture或Label的控件,添加一个自定义属性ICON,然后在选取图片文件时判断文件的扩展名,是ICO,则图像保存于ICON属性中,否则直接保存于Image属性中,在向SQL数据库保存时判断是保存ICON还是Image。然后在装载时使用容错,先视为ICON,转换成功则赋予Icon,否则转换为BitMap格式保存于Image,这样下次再次保存时也可判断是Icon还是Image,但使用容错速度慢!
拼命三朗 2006-12-05
  • 打赏
  • 举报
回复
如果Image.Save转换的流保存到数据库后,装载时使用Icon的FromStream出错,无法转换成Icon
北京的雾霾天 2006-12-05
  • 打赏
  • 举报
回复
为什么一定要Icon.ToBitmap,Icon也有一个FromStream的方法啊.
拼命三朗 2006-12-05
  • 打赏
  • 举报
回复
用Icon.ToBitmap以后能否在转换成ICON格式的流?因为用Image.Save转换的流保存到数据库,然后在通过Image.FromStream以后Icon的透明效果就没有了,而转换成Icon又出错,格式无效,所以我想知道用Icon.ToBitmap以后能否在转换成ICON格式的流?
拼命三朗 2006-12-05
  • 打赏
  • 举报
回复
哦,是用byte[]的,不过也一样出错,不过我现在的问题不是读取,而是保存时转换成何种格式的byte的问题
北京的雾霾天 2006-12-05
  • 打赏
  • 举报
回复
怎么还是用流啊,不用流,用byte[]就可以转换了.楼主没好好看我回帖.
拼命三朗 2006-12-05
  • 打赏
  • 举报
回复
因为数据库中的流已经不是ICON了而是Bitmap了
拼命三朗 2006-12-05
  • 打赏
  • 举报
回复
你上面的转换是行的,但如果用IconConverter来转换Image流也是会出错的,还是得用容错,不过ImageConverter将ICON流转换成的Image是行的,也是透明的,但是现在问题就出在保存Image时,如果一概将Image对象以Bitmap流来保存,那么读取时用ImageConverter转换出来的图形就失去透明了,而用IconConverter则会出错
北京的雾霾天 2006-12-04
  • 打赏
  • 举报
回复
VB.NET的用法如下:
Dim converter1 As New ImageConverter
Dim image1 As Image = TryCast(converter1.ConvertFrom(Nothing, CultureInfo.CurrentCulture, o),Image)
If (image1 Is Nothing) Then
Dim converter2 As New IconConverter
Dim icon1 As Icon = TryCast(converter2.ConvertFrom(Nothing, CultureInfo.CurrentCulture, 0),Icon)
If (icon1 Is Nothing) Then
End If
End If
北京的雾霾天 2006-12-04
  • 打赏
  • 举报
回复
Icon和Image不是一回事.
Icon和Image是两个不同的图像格式.但都可以用流来处理,比如存取SqlServer的Image字段都可以.

如果要知道一个byte[]是不是Image或Icon可以用如下的方法:
//以下o是一个byte[]的数组

ImageConverter imc = new ImageConverter();
Image _img = imc.ConvertFrom(null, System.Globalization.CultureInfo.CurrentCulture, o) as Image;
if (_img != null)
{
//处理_img;
return;
}
IconConverter icc = new IconConverter();
Icon _icon = icc.ConvertFrom(null, System.Globalization.CultureInfo.CurrentCulture, 0) as Icon;
if (_icon != null)
{
//处理_icon
return;
}
拼命三朗 2006-12-04
  • 打赏
  • 举报
回复
这样的话不是要开辟两个字段来存储每个地方的图片了?流不是可以转换成BitMap或ICON的吗?不知道交叉转换时是否会触发错误,如果触发,我不是可以使用容错来判断吗?我试试
dlzhangln 2006-12-04
  • 打赏
  • 举报
回复
楼上强!
北京的雾霾天 2006-12-04
  • 打赏
  • 举报
回复
http://www.microsoft.com/china/msdn/library/langtool/vbnet/LangEnhance.mspx?mfr=true
拼命三朗 2006-12-04
  • 打赏
  • 举报
回复
TryCast在哪个命名空间?
明后天会更好 2006-12-02
  • 打赏
  • 举报
回复
我估计没有方法控制,byte流不论什么都可以啊!包括BitMap、ICON,我以前是加入时判断的,或者只能ICON或BitMap要不就是存储数据库时,加上类型判断啊!!!

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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