UWP RichEditBox отключить изменение размера изображения

Я пытаюсь создать собственный редактор, в котором у меня есть окно редактирования, в которое я вставляю изображение. Я могу изменить размер изображения из редактора, как я могу отключить изменение размера. Al так как я могу получить вставленное изображение обратно.

1 ответ

Решение

Я могу изменить размер изображения из редактора, как я могу отключить изменение размера

Если вы хотите сохранить исходный размер изображения и вставить в RichEditBoxВы могли бы получить изображение PixelWidth а также PixelHeight значение с BitmapImage как следовать

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);
    }
}

Также, как я могу получить вставленное изображение

Исходя из этого ответа, вы можете проанализировать данные изображения из выбранного вами текста RTF. Затем используйте регулярное выражение для фильтрации доступных данных. Ниже приведен полный код, который вы можете использовать напрямую.

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;
}
Другие вопросы по тегам