【发布时间】:2014-10-16 18:02:28
【问题描述】:
我严重陷入了这个问题。 这个问题是因为我对 C# 概念很弱。 我想做的只是电子设备返回 gif 格式的数据。我相信这是二进制的。 所以我想将此数据转换为图像。
/// 下面只是向我想要的仪器发送命令“以 .gif 格式返回显示图像”
my6705B.WriteString("hcop:sdump:data?", true);
string image_format = my6705B.ReadString();
所以我从仪器收到 gif 数据,手册说这是“以 .gif 格式返回显示图像” ==> 我相信这是二进制格式。 下面的链接是字符串 image_format 中的内容。 字符串图像格式 http://i.stack.imgur.com/UcYqV.png
我的目标是将此字符串转换为图像文件。 (png或jpg随便) 所以我将此字符串变量转换为字节数组。 下面是我在这个命令之后的代码......
//// this also couldn't work ~~~
System.Text.UnicodeEncoding encode = new System.Text.UnicodeEncoding();
byte[] byte_array22 = encode.GetBytes(image_format);
MemoryStream ms4 = new MemoryStream(byte_array22);
Image image = Image.FromStream(ms4); //// error point
image.Save(@"C:\Users\Administrator\Desktop\imageTest.png");
//// this also couldn't work ~~~
byte[] byte_array22 = Encoding.Unicode.GetBytes(image_format);
MemoryStream ms4 = new MemoryStream(byte_array22);
Image image = Image.FromStream(ms4, true, true); /// always error here,,,
image.Save(@"C:\Users\Administrator\Desktop\imageTest.png", System.Drawing.Imaging.ImageFormat.Png);
两个代码都没有工作,错误点是一样的。我评论了错误点。 无论如何字符串到字节数组都是有效的。 我被这个问题困扰了好几天。 但我的供应商使用 C++ 编写此代码,这是有效的。 让我分享一下我的供应商的代码,这是用 C++ 实现的。
char szReadBuffer[102400] = {'\0', };
char szReadBinary[102400] = {'\0', };
m_iStatus = viOpenDefaultRM(&m_vDefaultRM);
m_iStatus = viOpen(m_vDefaultRM, (LPSTR)(LPCTSTR)m_strVISA, VI_NULL, VI_NULL, (ViPSession)&m_iDevHandle);
m_iStatus = viSetAttribute(m_iDevHandle, VI_ATTR_TMO_VALUE, 15000);
m_iStatus = QueryGPIB("HCOPy:SDUMp:DATA?", szReadBuffer, sizeof(szReadBuffer));
//Store the results in a text file
CFile file;
file.Open("PICTURE.GIF", CFile::modeReadWrite | CFile::modeCreate | CFile::typeBinary);
memcpy(szReadBinary, &szReadBuffer[2], sizeof(szReadBuffer));
file.Write(szReadBinary, sizeof(szReadBinary));
file.Close();
我认为重要的是他们声明的内容。他们声明 char[] 。 并建议我这个 C++ 代码确实使用了 String MultiByte ? (只是听到他的消息) 我对 C++ 没有经验。 如果我遵循这个 c++ 代码然后工作。
我的目标是用 C# 实现。所以需要遵循C++代码。
请提出我的问题。
【问题讨论】:
-
基本上你不应该以
string的形式接收二进制数据。目前尚不清楚my6705B是什么,但理想情况下您应该读取二进制 数据,而不是字符串。
标签: c# image bytearray gif multibyte