此时我一直在使用public class Emoticon
{
public Emoticon(string key, Bitmap bitmap)
{
Key = key;
Bitmap = bitmap;
BitmapImage = bitmap.ToBitmapImage();
}
public string Key { get; }
public Bitmap Bitmap { get; }
public BitmapImage BitmapImage { get; }
}
public class EmoticonRichTextBox : RichTextBox
{
private readonly List<Emoticon> _emoticons;
public EmoticonRichTextBox()
{
_emoticons = new List<Emoticon>
{
new Emoticon(":D", Properties.Resources.grinning_face)
};
}
protected override void OnTextChanged(TextChangedEventArgs e)
{
base.OnTextChanged(e);
Dispatcher.InvokeAsync(Look);
}
private void Look()
{
const string keyword = ":D";
var text = new TextRange(Document.ContentStart, Document.ContentEnd);
var current = text.Start.GetInsertionPosition(LogicalDirection.Forward);
while (current != null)
{
var textInRun = current.GetTextInRun(LogicalDirection.Forward);
if (!string.IsNullOrWhiteSpace(textInRun))
{
var index = textInRun.IndexOf(keyword, StringComparison.Ordinal);
if (index != -1)
{
var selectionStart = current.GetPositionAtOffset(index, LogicalDirection.Forward);
if (selectionStart == null)
continue;
var selectionEnd = selectionStart.GetPositionAtOffset(keyword.Length, LogicalDirection.Forward);
var selection = new TextRange(selectionStart, selectionEnd) { Text = string.Empty };
var emoticon = _emoticons.FirstOrDefault(x => x.Key.Equals(keyword));
if (emoticon == null)
continue;
var image = new System.Windows.Controls.Image
{
Source = emoticon.BitmapImage,
Height = 18,
Width = 18,
Margin = new Thickness(0, 3, 0, 0)
};
// inserts at the end of the line
selection.Start?.Paragraph?.Inlines.Add(image);
// doesn't work
CaretPosition = CaretPosition.GetPositionAtOffset(1, LogicalDirection.Forward);
}
}
current = current.GetNextContextPosition(LogicalDirection.Forward);
}
}
}
public static class BitmapExtensions
{
public static BitmapImage ToBitmapImage(this Bitmap bitmap)
{
using (var stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Png);
stream.Position = 0;
var image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.DecodePixelHeight = 18;
image.DecodePixelWidth = 18;
image.StreamSource = stream;
image.EndInit();
image.Freeze();
return image;
}
}
}
在我的主页上显示缩略图,该缩略图输出最初为移动浏览制作的72x72方形图像。然后我使用jquery将图像从72-c缩放到s300。我想知道是否有一种不同的方法来获取缩略图而不使用js。
Blogger发布的新模板集可以使用数据输出32,64,128和256像素的缩略图大小:post.featuredImage。如何将其应用于自定义模板?
答案 0 :(得分:3)
利用resizeImage运算符在不使用JavaScript的情况下更改图像大小。代码看起来像 -
<img expr:src='resizeImage(data:post.thumbnailUrl, 1600)'/>
resizeImage(imageUrl,newSize,optionalRatio)
resizeImage运算符有3个参数:
imageUrl - 可调整大小图片的原始网址。
newSize - 新的 图像的宽度
(可选)比率 - 宽度的整数比率 调整大小的图像的高度,例如“1:1”或“4:3”注释
如果imageUrl参数不是可调整大小的图像,则为resizeImage 函数将返回原始imageUrl。
比率必须是整数 数字。
如果提供了比率,图像将被裁剪为那些 确切的尺寸。