/// <summary> /// Load a residual layer bitmap into clearcode encoder. /// </summary> /// <param name = "subcodecBitmap"> specifies a subcodec layer image </param> /// <param name = "pos"> specifies position of subcodec layer image, relative to residual layer image </param> /// <param name = "sbcID"> specifies subcodec ID to encoding subcodec layer image </param> public void LoadSubcodecBitmap(Bitmap subcodecBitmap, RDPGFX_POINT16 pos, CLEARCODEC_SUBCODEC_ID sbcID) { if (subcodecBitmap != null) { ClearCodec_RECT16 scRect = new ClearCodec_RECT16(); scRect.left = pos.x; scRect.top = pos.y; scRect.right = (ushort)(pos.x + subcodecBitmap.Width); scRect.bottom = (ushort)(pos.x + subcodecBitmap.Height); BMP_INFO bmp_info = new BMP_INFO(); bmp_info.bmp = subcodecBitmap; bmp_info.scID = sbcID; this.subcodecDict.Add(scRect, bmp_info); } }
/// <summary> /// Encode a subcodec bitmap area into byte stream /// </summary> /// <param name="subcodeBmp">The bitmap to be encoded in subcodec layer.</param> /// <param name="subcodecRect">The subcodec area relative to bitmap left-top edge.</param> /// <param name="subcodecID">The subcodec ID to be chosen.</param> /// <param name="subcodec">The subcodec layer encode result.</param> public static bool EncodeSubcodec(Bitmap subcodecBmp, ClearCodec_RECT16 subcodecRect, CLEARCODEC_SUBCODEC_ID subcodecID, ref CLEARCODEC_SUBCODEC subcodec) { if (subcodecBmp == null) return false; subcodec.xStart = subcodecRect.left; subcodec.yStart = subcodecRect.top; subcodec.width = (ushort)(subcodecRect.right - subcodecRect.left); subcodec.height = (ushort)(subcodecRect.bottom - subcodecRect.top); // save subcodecID subcodec.bitmapData.subCodecId = subcodecID; // get encoded data based on subcodecID if (subcodecID == CLEARCODEC_SUBCODEC_ID.SUBCODEC_RLEX) { // RLEX encoded bitmap data if( !RlexEncode(subcodecBmp, ref subcodec.bitmapData.bmpRlex)) return false; } else { // raw encoded bitmap data if (!RawEncode(subcodecBmp, ref subcodec.bitmapData.bmpPixels)) return false; } return true; }
/// <summary> /// Encode a subcodec bitmap area into byte stream /// </summary> /// <param name="subcodeBmp">The bitmap to be encoded in subcodec layer.</param> /// <param name="subcodecRect">The subcodec area relative to bitmap left-top edge.</param> /// <param name="subcodecID">The subcodec ID to be chosen.</param> /// <param name="subcodec">The subcodec layer encode result.</param> public static bool EncodeSubcodec(Bitmap subcodecBmp, ClearCodec_RECT16 subcodecRect, CLEARCODEC_SUBCODEC_ID subcodecID, ref CLEARCODEC_SUBCODEC subcodec) { if (subcodecBmp == null) { return(false); } subcodec.xStart = subcodecRect.left; subcodec.yStart = subcodecRect.top; subcodec.width = (ushort)(subcodecRect.right - subcodecRect.left); subcodec.height = (ushort)(subcodecRect.bottom - subcodecRect.top); // save subcodecID subcodec.bitmapData.subCodecId = subcodecID; // get encoded data based on subcodecID if (subcodecID == CLEARCODEC_SUBCODEC_ID.SUBCODEC_RLEX) { // RLEX encoded bitmap data if (!RlexEncode(subcodecBmp, ref subcodec.bitmapData.bmpRlex)) { return(false); } } else { // raw encoded bitmap data if (!RawEncode(subcodecBmp, ref subcodec.bitmapData.bmpPixels)) { return(false); } } return(true); }