void onNotify(ImageMsg msg) { if (msg != null) { messageActionTable.fireMessageTrigger(msg); } }
/// <summary> /// Converts a byte array from BGR to RGB. /// </summary> static byte[] EncodingConversion(ImageMsg image, bool convertBGR = true, bool flipY = true) { // Number of channels in this encoding int channels = image.GetNumChannels(); if (!image.EncodingRequiresBGRConversion()) { convertBGR = false; } // If no modifications are necessary, return original array if (!convertBGR && !flipY) { return(image.data); } int channelStride = image.GetBytesPerChannel(); int pixelStride = channelStride * channels; int rowStride = pixelStride * (int)image.width; if (flipY) { ReverseInBlocks(image.data, rowStride, (int)image.height); } if (convertBGR) { // given two channels, we swap R with G (distance = 1). // given three or more channels, we swap R with B (distance = 2). int swapDistance = channels == 2 ? channelStride : channelStride * 2; int dataLength = (int)image.width * (int)image.height * pixelStride; if (channelStride == 1) { // special case for the 1-byte-per-channel formats: avoid the inner loop for (int pixelIndex = 0; pixelIndex < dataLength; pixelIndex += pixelStride) { int swapB = pixelIndex + swapDistance; byte temp = image.data[pixelIndex]; image.data[pixelIndex] = image.data[swapB]; image.data[swapB] = temp; } } else { for (int pixelIndex = 0; pixelIndex < dataLength; pixelIndex += pixelStride) { int channelEndByte = pixelIndex + channelStride; for (int byteIndex = pixelIndex; byteIndex < channelEndByte; byteIndex++) { int swapB = byteIndex + swapDistance; byte temp = image.data[byteIndex]; image.data[byteIndex] = image.data[swapB]; image.data[swapB] = temp; } } } } return(image.data); }
static ImageMsg MsgFromTexture(Texture2D text) { int width = text.width; int height = text.height; int channels = 4; Color32[] pixels = text.GetPixels32(); byte[] buf = new byte[width * height * channels]; // to bgr int index = 0; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x, ++index) { buf [4 * index] = pixels [index].r; buf [4 * index + 1] = pixels [index].g; buf [4 * index + 2] = pixels [index].b; buf [4 * index + 3] = pixels [index].a; } } ImageMsg msg = new ImageMsg(); msg.width = width; msg.height = height; msg.channels = channels; msg.image_data = buf; return(msg); }
public new static void CallBack(ROSBridgeMsg msg) { ImageMsg image = (ImageMsg)msg; byte[] color_data = image.GetImage(); int height = (int)image.GetHeight(); int width = (int)image.GetWidth(); int step = (int)image.GetRowStep(); Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false); Color[] colors = new Color[width * height]; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { byte B = color_data[j * step + i * 3]; byte G = color_data[j * step + i * 3 + 1]; byte R = color_data[j * step + i * 3 + 2]; Color c = new Color((float)R / 255.0f, (float)G / 255.0f, (float)B / 255.0f); colors[j * width + i] = c; //tex.SetPixel(i, height - j, c); } } tex.SetPixels(colors); tex.Apply(); GameObject cam_image = GameObject.Find("CameraImage"); cam_image.GetComponent <RawImage>().texture = tex; }
public void PushMessage(ImageMsg msg) { if (msg != null) { mEventQueue.pushObject(msg); } }
public void SendImage(ImageMsg msg) { if (connect == null || !connect.isConnected) { return; } connect.writeObject(msg); }
public static int GetBytesPerChannel(this ImageMsg image) { switch (image.encoding) { case "8SC1": case "8SC2": case "8SC3": case "8SC4": case "8UC1": case "8UC2": case "8UC3": case "8UC4": case "mono8": case "bgr8": case "rgb8": case "bgra8": case "rgba8": case "bayer_rggb8": case "bayer_bggr8": case "bayer_gbrg8": case "bayer_grbg8": return(1); case "16SC1": case "16SC2": case "16SC3": case "16SC4": case "16UC1": case "16UC2": case "16UC3": case "16UC4": case "mono16": case "bayer_rggb16": case "bayer_bggr16": case "bayer_gbrg16": case "bayer_grbg16": return(2); case "32FC1": case "32SC1": case "32FC2": case "32SC2": case "32FC3": case "32SC3": case "32FC4": case "32SC4": return(4); case "64FC1": case "64FC2": case "64FC3": case "64FC4": return(8); } return(1); }
// Update is called once per frame void Update() { ImageMsg info = null; info = mEventQueue.popObject(); while (info != null) { onNotify(info); info = mEventQueue.popObject(); } }
// ROS Topic Subscriber methods public ROSBridgeMsg OnReceiveMessage(string topic, JSONNode raw_msg, ROSBridgeMsg parsed = null) { Debug.Log("Camera Recieved message"); ROSBridgeMsg result = null; ImageMsg meshMsg = new ImageMsg(raw_msg); // Obtain visualizer for this topic ImageVisualizer visualizer = imageVisualizers[topic]; this.imageVisualizers[topic].SetFrame(meshMsg, videoType); return(result); }
public new static void CallBack(ROSBridgeMsg msg) { ImageMsg image = (ImageMsg)msg; int curr = num; num++; if (verbose) { Debug.Log("Start processing " + curr); } uint width = image.GetWidth(); uint height = image.GetHeight(); byte[] raw_data = image.GetImage(); RawImage texObj = GameObject.Find(objectName).GetComponent <RawImage>(); Texture2D tex = GameObject.Find(objectName).GetComponent <RawImage>().texture as Texture2D; if (tex == null) { tex = new Texture2D((int)width / 2, (int)height / 2, TextureFormat.RGBA32, false); texObj.texture = tex; } NativeArray <Color32> image_data = tex.GetRawTextureData <Color32>(); if (image_data == null || image_data.Length * 4 != raw_data.Length) { tex = new Texture2D((int)width / 2, (int)height / 2, TextureFormat.RGBA32, false); texObj.texture = tex; image_data = tex.GetRawTextureData <Color32>(); } for (int ind = 0, o_ind = raw_data.Length - 4; ind < image_data.Length; ind += 1, o_ind -= 4) { image_data[ind] = new Color32(raw_data[o_ind + 3], (byte)((raw_data[o_ind + 1] + raw_data[o_ind + 2]) / 2), raw_data[o_ind], 255); } //tex.LoadRawTextureData(image_data); tex.Apply(); if (verbose) { Debug.Log("Finish processing " + curr); } //File.WriteAllBytes(Application.dataPath + "/Captures/" + curr + ".png", tex.EncodeToPNG()); }
/// <summary> /// 发送图片消息 /// </summary> /// <param name="msg"></param> /// <param name="access_token">访问令牌</param> /// <returns></returns> public static RequestResultBaseModel SendImage(ImageMsg msg, string access_token) { if (null == msg || string.IsNullOrWhiteSpace(msg.touser)) { throw new ArgumentException("参数错误", nameof(msg.touser)); } if (null == msg.image || string.IsNullOrWhiteSpace(msg.image.media_id)) { throw new ArgumentException("image错误"); } string jsonString = JsonHelper.Serialize(msg); return(SendToWeCart(jsonString, access_token)); }
public void SetFrame(ImageMsg data, string videoPlayer) { Debug.Log(videoPlayer); if (videoPlayer == "") { return; } Texture2D tex = new Texture2D((int)data.GetWidth(), (int)data.GetHeight(), TextureFormat.RGB24, false); GameObject.Find(videoPlayer).GetComponent <RawImage>().enabled = true; GameObject.Find(videoPlayer).GetComponent <RectTransform>().sizeDelta = new Vector2((int)data.GetWidth(), (int)data.GetHeight()); tex.LoadRawTextureData(data.GetImage()); tex.Apply(); GameObject.Find(videoPlayer).GetComponent <RawImage>().texture = tex; }
public static bool IsBayerEncoded(this ImageMsg image) { switch (image.encoding) { case "bayer_rggb8": case "bayer_bggr8": case "bayer_gbrg8": case "bayer_grbg8": case "bayer_rggb16": case "bayer_bggr16": case "bayer_gbrg16": case "bayer_grbg16": return(true); default: return(false); } }
public static string SendImage(ImageMsg msg) { if (null == msg || string.IsNullOrWhiteSpace(msg.touser)) { return(string.Empty); } if (null == msg.image || string.IsNullOrWhiteSpace(msg.image.media_id)) { throw new ArgumentException("image错误"); } string jsonString = JsonHelper.Serialize(msg); if (!string.IsNullOrWhiteSpace(jsonString)) { return(jsonString); } return(string.Empty); }
public static Texture2D ToTexture2D(this ImageMsg message, bool debayer = false, bool convertBGR = true, bool flipY = true) { Texture2D tex; byte[] data; if (debayer && message.IsBayerEncoded()) { tex = new Texture2D((int)message.width / 2, (int)message.height / 2, TextureFormat.RGBA32, false); message.DebayerConvert(flipY); data = message.data; } else { tex = new Texture2D((int)message.width, (int)message.height, message.GetTextureFormat(), false); data = EncodingConversion(message, convertBGR, flipY); } tex.LoadRawTextureData(data); tex.Apply(); return(tex); }
/// <summary> /// Renders the received images from the zed camera /// </summary> /// <param name="msg">JSON msg containing the roboy pose.</param> private void RefreshZedImage(ImageMsg image) { //Get the image as an array from the message. byte[] image_temp = image.GetImage(); int j = 0; for (int i = 0; i < image_temp.Length; i += 3) { m_ColorArrayZed[j].b = image_temp[i] / (float)255; m_ColorArrayZed[j].g = image_temp[i + 1] / (float)255; m_ColorArrayZed[j].r = image_temp[i + 2] / (float)255; m_ColorArrayZed[j].a = 1f; j++; } // Load data into the texture. m_TexZed.SetPixels(m_ColorArrayZed); m_TexZed.Apply(); Graphics.Blit(m_TexZed, RT_Zed); }
static Texture2D TextureFromMsg(ImageMsg msg) { Texture2D tex = new Texture2D(msg.width, msg.height, TextureFormat.ARGB32, false); int width = msg.width; int height = msg.height; int index = 0; Color32[] pixels = new Color32[width * height]; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x, ++index) { byte r = msg.image_data[4 * index]; byte g = msg.image_data [4 * index + 1]; byte b = msg.image_data [4 * index + 2]; byte a = 255; pixels [index] = new Color32(r, g, b, a); } } tex.SetPixels32(pixels); tex.Apply(); return(tex); }
public static bool EncodingRequiresBGRConversion(this ImageMsg image) { switch (image.encoding) { case "8SC1": case "8UC1": case "16SC1": case "16UC1": case "32FC1": case "32SC1": case "64FC1": case "mono8": case "mono16": // single channel = nothing to swap return(false); case "8UC4": case "8SC4": case "bgra8": return(false); // raw BGRA32 texture format case "rgb8": return(false); // raw RGB24 texture format case "rgba8": return(false); // raw RGB32 texture format case "bayer_rggb8": case "bayer_bggr8": case "bayer_gbrg8": case "bayer_grbg8": return(false); // bayer has its own conversions needed default: return(true); } }
public static TextureFormat GetTextureFormat(this ImageMsg image) { switch (image.encoding) { case "8UC1": case "8SC1": return(TextureFormat.R8); case "8UC2": case "8SC2": return(TextureFormat.RG16); case "8UC3": case "8SC3": return(TextureFormat.RGB24); case "8UC4": case "8SC4": case "bgra8": return(TextureFormat.BGRA32); // unity supports these natively case "16UC1": case "16SC1": return(TextureFormat.R16); case "16UC2": case "16SC2": return(TextureFormat.RG32); case "16UC3": case "16SC3": return(TextureFormat.RGB48); case "16UC4": case "16SC4": return(TextureFormat.RGBA64); case "32SC1": case "32SC2": case "32SC3": case "32SC4": throw new NotImplementedException("32 bit integer texture formats are not supported"); case "32FC1": return(TextureFormat.RFloat); case "32FC2": return(TextureFormat.RGFloat); case "32FC3": throw new NotImplementedException("32FC3 texture format is not supported"); case "32FC4": return(TextureFormat.RGBAFloat); case "64FC1": case "64FC2": case "64FC3": case "64FC4": throw new NotImplementedException("Double precision texture formats are not supported"); case "mono8": return(TextureFormat.R8); case "mono16": return(TextureFormat.R16); case "bgr8": return(TextureFormat.RGB24); case "rgb8": return(TextureFormat.RGB24); // unity supports this natively case "rgba8": return(TextureFormat.RGBA32); // unity supports this natively case "bayer_rggb8": case "bayer_bggr8": case "bayer_gbrg8": case "bayer_grbg8": return(TextureFormat.R8); case "bayer_rggb16": case "bayer_bggr16": case "bayer_gbrg16": case "bayer_grbg16": return(TextureFormat.R16); } return(TextureFormat.RGB24); }
public static string GetMessageType() { return(ImageMsg.GetMessageType()); }
protected void Button1_Click(object sender, EventArgs e) { string vid = ""; string hid = ""; string hk = ""; FileInfo ff = new FileInfo(imgname2 + ".png"); string fn2 = ff.DirectoryName + "_" + ff.Name; if (ct == "Pan Card") { dob = dttm.Day + "/" + dttm.Month + "/" + dttm.Year; vid = _Programs.GetCardVHID(10); Thread.Sleep(3000); hid = _Programs.GetCardVHID(10); //imgname2 = imgname2 + vid; CardTemp.createPan(name, fname, dob, vid, imgname, imgname2 + ".png"); //Thread.Sleep(1000); //CryptUtility.HideHID(imgname2 + ".png", fn2, hid); //try //{ // if (File.Exists(imgname2 + ".png")) // File.Delete(imgname2 + ".png"); //} //catch (Exception ee) { } } else if (ct == "Id Card") { string[] month = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; dob = dttm.Day + "th " + month[dttm.Month].ToUpper() + ", " + dttm.Year; vid = _Programs.GetCardVHID(4); Thread.Sleep(3000); hid = _Programs.GetCardVHID(4); CardTemp.createID(name, vid, dob, imgname, imgname2 + ".png"); } else if (ct == "Passport") { string[] month = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; dob = dttm.Day + " " + month[dttm.Month].ToUpper() + ", " + dttm.Year; vid = _Programs.GetPPNo(9); Thread.Sleep(3000); hid = _Programs.GetPPNo(9); DateTime dt1 = DateTime.Now; string doi = dt1.Day + " " + month[dt1.Month].ToUpper() + ", " + dt1.Year; string doe = dt1.Day + " " + month[dt1.Month].ToUpper() + ", " + (dt1.Year + 10); CardTemp.createPassport(lname, fname2, "indian", gender[0].ToString(), dob, doi, doe, city, vid, imgname, imgname2 + ".png"); } Thread.Sleep(1000); byte[] bb = ImageMsg.createImageMsg(fname2, lname, gender, dob, vid, hid, un2); MyFile.UpdateFile(imgname2 + ".png", bb); Thread.Sleep(1000); hk = MyFile.GetHashKey(imgname2 + ".png"); Thread.Sleep(1000); string ccdt = DateTime.Now.ToShortDateString(); string qry = "update userappinfo set appstatus='Done', ccdt=datevalue('" + ccdt + "') where appid='" + appid + "'"; int i = _Database.NonSelectQuery(qry); if (i == 1) { qry = "insert into cardlist values('" + appid + "','" + un2 + "','" + ct + "','" + vid + "','" + hid + "','" + hk + "')"; _Database.NonSelectQuery(qry); Response.Write("<script language='javascript'> alert('The Card has been generated successfully'); document.location='" + ResolveClientUrl("~/CardList.aspx") + "';</script>"); // smsg.Text = "<b>The Card has been generated successfully</b>"; //Response.Redirect("VerifiedList.aspx"); } else { smsg.Text = "<b>Error: </b>" + _Database.LastError; } }
public static void DebayerConvert(this ImageMsg image, bool flipY = true) { int channelStride = image.GetBytesPerChannel(); int width = (int)image.width; int height = (int)image.height; int rowStride = width * channelStride; int dataSize = rowStride * height; int finalPixelStride = channelStride * 4; int[] reorderIndices; switch (image.encoding) { case "bayer_rggb8": reorderIndices = new int[] { 0, 1, width + 1 }; break; case "bayer_bggr8": reorderIndices = new int[] { width + 1, 1, 0 }; break; case "bayer_gbrg8": reorderIndices = new int[] { width, 0, 1 }; break; case "bayer_grbg8": reorderIndices = new int[] { 1, 0, width }; break; case "bayer_rggb16": reorderIndices = new int[] { 0, 1, 2, 3, rowStride + 2, rowStride + 3 }; break; case "bayer_bggr16": reorderIndices = new int[] { rowStride + 2, rowStride + 3, 2, 3, 0, 1 }; break; case "bayer_gbrg16": reorderIndices = new int[] { rowStride, rowStride + 1, 0, 1, 2, 3 }; break; case "bayer_grbg16": reorderIndices = new int[] { 2, 3, 0, 1, rowStride, rowStride + 1 }; break; default: return; } if (flipY) { ReverseInBlocks(image.data, rowStride * 2, (int)image.height / 2); } if (s_ScratchSpace == null || s_ScratchSpace.Length < rowStride * 2) { s_ScratchSpace = new byte[rowStride * 2]; } int rowStartIndex = 0; while (rowStartIndex < dataSize) { Buffer.BlockCopy(image.data, rowStartIndex, s_ScratchSpace, 0, rowStride * 2); int pixelReadIndex = 0; int pixelWriteIndex = rowStartIndex; while (pixelReadIndex < rowStride) { for (int Idx = 0; Idx < reorderIndices.Length; ++Idx) { image.data[pixelWriteIndex + Idx] = s_ScratchSpace[pixelReadIndex + reorderIndices[Idx]]; } image.data[pixelWriteIndex + reorderIndices.Length] = 255; if (channelStride == 2) { image.data[pixelWriteIndex + reorderIndices.Length + 1] = 255; } pixelReadIndex += channelStride * 2; pixelWriteIndex += finalPixelStride; } rowStartIndex += rowStride * 2; } image.width = image.width / 2; image.height = image.height / 2; image.encoding = channelStride == 1 ? "rgba8" : "rgba16"; image.step = (uint)(channelStride * image.width); }
/// <summary> /// Primary function to receive image (simulation) messages from ROSBridge. Renders the received images. /// </summary> /// <param name="msg">JSON msg containing roboy pose.</param> public void ReceiveSimMessage(ImageMsg image) { RefreshSimImage(image); }
public new static void CallBack(ROSBridgeMsg msg) { ImageMsg image = (ImageMsg)msg; BeRoboyManager.Instance.ReceiveSimMessage(image); }
void OnReceveImage(ImageMsg msg) { }
/// <summary> /// Primary function to receive image (zed) messages from ROSBridge. Renders the received images. /// </summary> /// <param name="msg">JSON msg containing roboy pose.</param> public void ReceiveZedMessage(ImageMsg image) { RefreshZedImage(image); }
public string Index() { StreamReader reader = new StreamReader(Request.InputStream); string xmlData = reader.ReadToEnd(); BaseMsg baseModel = XmlHelper.ConvertToModel <BaseMsg>(xmlData); BaseResponseMsg response = new BaseResponseMsg { CreateTime = CommonHelp.TimeToLong(DateTime.Now), ToUserName = baseModel.FromUserName, FromUserName = baseModel.ToUserName };//响应对象 string result = ""; try { if (baseModel.MsgType == "event") { EventMsg model = XmlHelper.ConvertToModel <EventMsg>(xmlData); //EventMsgBll.HandlerTheEvent(model); EventMsgBll.Add(model); EventMsgBll.SaveChanges(); return(""); } var res = (MsgType)Enum.Parse(typeof(MsgType), baseModel.MsgType); switch (res) { case MsgType.text: { TextMsg model = XmlHelper.ConvertToModel <TextMsg>(xmlData); TextMsgBll.Add(model); //TODO 处理用户的文字信息 response = new ResponseTextMsg { CreateTime = CommonHelp.TimeToLong(DateTime.Now), ToUserName = baseModel.FromUserName, FromUserName = baseModel.ToUserName, Content = "欢迎关注我的微信!我是wdq!" }; } break; case MsgType.image: { ImageMsg model = XmlHelper.ConvertToModel <ImageMsg>(xmlData); ImageMsgBll.Add(model); //TODO 处理用户的图片信息 response = new ResponseImageMsg { CreateTime = CommonHelp.TimeToLong(DateTime.Now), FromUserName = baseModel.ToUserName, ToUserName = baseModel.FromUserName, MediaId = "1212" }; } break; case MsgType.voice: { VoiceMsg model = XmlHelper.ConvertToModel <VoiceMsg>(xmlData); VoiceMsgBll.Add(model); if (model.Recognition != null) { //TODO 处理用户的语音信息 } response = new ResponseVoiceMsg { FromUserName = baseModel.ToUserName, ToUserName = baseModel.FromUserName, CreateTime = CommonHelp.TimeToLong(DateTime.Now), MediaId = "123" }; } break; case MsgType.video: case MsgType.shortvideo: { VideoMsg model = XmlHelper.ConvertToModel <VideoMsg>(xmlData); VideoMsgBll.Add(model); //TODO 处理用户的小视频信息 } response = new ResponseVideoMsg { FromUserName = baseModel.ToUserName, ToUserName = baseModel.FromUserName, CreateTime = CommonHelp.TimeToLong(DateTime.Now), MediaId = "123", Description = "test", Title = "回复视频消息" }; break; case MsgType.location: { LocationMsg model = XmlHelper.ConvertToModel <LocationMsg>(xmlData); LocationMsgBll.Add(model); //TODO 处理用户的地理位置信息 } response = new ResponseMusicMsg { FromUserName = baseModel.ToUserName, ToUserName = baseModel.FromUserName, CreateTime = CommonHelp.TimeToLong(DateTime.Now), Title = "回复音乐消息", Description = "一段感人的音乐", HQMusicUrl = "http://baidu.music.com", MusicUrl = "fuuuul", ThumbMediaId = "123" }; break; case MsgType.link: { LinkMsg model = XmlHelper.ConvertToModel <LinkMsg>(xmlData); LinkBll.Add(model); //TODO 处理用户的连接信息 } response = new ResponseNewsMsg { FromUserName = baseModel.ToUserName, ToUserName = baseModel.FromUserName, CreateTime = CommonHelp.TimeToLong(DateTime.Now), ArticleCount = 1, Articles = new[] { new ResponseNewsMsg.Article { Description = "", PicUrl = "", Title = "", Url = "" } }, }; break; } EventMsgBll.SaveChanges(); } catch (DbEntityValidationException dbEx) { result = dbEx.EntityValidationErrors.SelectMany(item => item.ValidationErrors).Aggregate(result, (current, item2) => current + string.Format("{0}:{1}\r\n", item2.PropertyName, item2.ErrorMessage)); } return(response.ToUserName == null ? "" : response.GetResponseStr()); }