uwpricheditbox

UWP RichEditBox disable image resize


I'm trying to build a native editor in which i have a rich edit box in which i insert an image. I'm able to resize the image from the editor, how can I disable resizing. Alenter image description hereso how can i get the inserted image back.


Solution

  • I'm able to resize the image from the editor, how can I disable resizing

    If you want to keep image original size and insert to RichEditBox, you could get the image PixelWidth and PixelHeight value with BitmapImage like the follow.

    Windows.Storage.Pickers.FileOpenPicker open = new Windows.Storage.Pickers.FileOpenPicker();
    open.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
    open.FileTypeFilter.Add(".png");
    Windows.Storage.StorageFile file = await open.PickSingleFileAsync();
    if (file != null)
    {
        using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
    
        {
            BitmapImage image = new BitmapImage();
            await image.SetSourceAsync(fileStream);
            Test.Document.Selection.InsertImage(image.PixelWidth, image.PixelHeight, 0, VerticalCharacterAlignment.Baseline, "img", fileStream);
        }
    }
    

    Also how can i get the inserted image

    Derive from this case reply, you could parse picture data from your selected rtf text. Then use regular expression to filter available data. The follow is a complete code that you could use directly.

    private async void GetImage(object sender, RoutedEventArgs e)
    {
        string rtf = "";
        Test.Document.Selection.GetText(TextGetOptions.FormatRtf, out rtf);
        string imageDataHex = "";
        var r = new Regex(@"pict[\s\S]+?[\r\n](?<imagedata>[\s\S]+)[\r\n]\}\\par", RegexOptions.None);
        var m = r.Match(rtf);
        if (m.Success)
        {
            imageDataHex = m.Groups["imagedata"].Value;
        }
        byte[] imageBuffer = ToBinary(imageDataHex);
        StorageFile tempfile = await ApplicationData.Current.LocalFolder.CreateFileAsync("temppic.png", CreationCollisionOption.ReplaceExisting);
        await FileIO.WriteBufferAsync(tempfile, imageBuffer.AsBuffer());
    }
    
    public static byte[] ToBinary(string imageDataHex)
    {
        //this function taken entirely from:
        // http://www.codeproject.com/Articles/27431/Writing-Your-Own-RTF-Converter
        if (imageDataHex == null)
        {
            throw new ArgumentNullException("imageDataHex");
        }
    
        int hexDigits = imageDataHex.Length;
        int dataSize = hexDigits / 2;
        byte[] imageDataBinary = new byte[dataSize];
    
        StringBuilder hex = new StringBuilder(2);
    
        int dataPos = 0;
        for (int i = 0; i < hexDigits; i++)
        {
            char c = imageDataHex[i];
            if (char.IsWhiteSpace(c))
            {
                continue;
            }
            hex.Append(imageDataHex[i]);
            if (hex.Length == 2)
            {
                imageDataBinary[dataPos] = byte.Parse(hex.ToString(), System.Globalization.NumberStyles.HexNumber);
                dataPos++;
                hex.Remove(0, 2);
            }
        }
        return imageDataBinary;
    }