When you scan the face and the user has a profile image on the user list in the device.


There are also related functions in the document below. Please refer to BS2 UserPhoto.


https://kb.supremainc.com/kbtest/doku.php?id=en:user_management_api#bs2userfaceexblob

BS2UserPhoto

typedef struct {    uint32_t size;    uint8_t data[BS2_USER_PHOTO_SIZE];
} BS2UserPhoto;

1. size
Size of the user profile image data.

2. data
Data of the profile image, which can be stored up to 16kb.

Sample code

else if (faceExScanSupported)//BS2UserPhoto
  {
                Console.WriteLine("Do you want to set profile image? [Y/n]");
                Console.Write(">>>> ");
                if (Util.IsYes())
                {
                    Console.WriteLine("Enter the jpg file path for this user.");
                    Console.Write(">>>> ");
                    string imagePath = Console.ReadLine();

                    if (!File.Exists(imagePath))
                    {
                        Console.WriteLine("Invalid file path");
                        return;
                    }

                    Image profileImage = Image.FromFile(imagePath);
                    if (!profileImage.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
                    {
                        Console.WriteLine("Invalid image file format");
                        return;
                    }

                    IntPtr imageData = IntPtr.Zero;
                    UInt32 imageDataLen = 0;

                    if (Util.LoadBinary(imagePath, out imageData, out imageDataLen))
                    {
                        if (imageDataLen == 0)
                        {
                            Console.WriteLine("Empty image file");
                            return;
                        }
                        else if (imageDataLen > BS2Environment.BS2_USER_PHOTO_SIZE)
                        {
                            Console.WriteLine("The profile image should less than {0} bytes.", BS2Environment.BS2_USER_PHOTO_SIZE);
                            return;
                        }


                        userBlob[0].user_photo_obj = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(BS2UserPhoto)));
                        IntPtr curObj = userBlob[0].user_photo_obj;

                        Marshal.WriteInt32(curObj, (Int32)imageDataLen);
                        curObj += 4;
                        IntPtr curDest = curObj;
                        IntPtr curSrc = imageData;
                        for (int idx = 0; idx < Math.Min((int)imageDataLen, BS2Environment.BS2_USER_PHOTO_SIZE); ++idx)
                        {
                            Marshal.WriteByte(curDest, Marshal.ReadByte(curSrc));
                            curDest += 1;
                            curSrc += 1;
                        }
                        curObj += BS2Environment.BS2_USER_PHOTO_SIZE;
                        Marshal.FreeHGlobal(imageData);
                    }
                }  
            }