このプロパティにバインドされている画像コントロールを含むビューがあります。
private System.Drawing.Image _sigImage;
public System.Drawing.Image sigImage
{
get { return _sigImage; }
set { _sigImage = value; RaisePropertyChanged(); }
}
mvvmを使用して署名パッドを実装するのに忙しく、画像コントロールに署名を表示したいと思っています。しかし、私はそれを表示させることができません。
署名パッドのコードは次のとおりです。
DynamicCapture dc = new DynamicCaptureClass();
DynamicCaptureResult res = dc.Capture(sigCtl, "Who", "Why", null, null);
if (res == DynamicCaptureResult.DynCaptOK)
{
sigObj = (SigObj)sigCtl.Signature;
sigObj.set_ExtraData("AdditionalData", "C# test: Additional data");
try
{
byte[] binaryData = sigObj.RenderBitmap("sign", 200, 150, "image/png", 0.5f, 0xff0000, 0xffffff, 10.0f, 10.0f, RBFlags.RenderOutputBinary | RBFlags.RenderColor32BPP) as byte[];
using (MemoryStream memStream = new MemoryStream(binaryData))
{
System.Drawing.Image newImage = System.Drawing.Image.FromStream(memStream);
sigImage = newImage;
// work with image here.
// You'll need to keep the MemoryStream open for
// as long as you want to work with your new image.
memStream.Dispose();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
画像はビットマップとして変数newImageに保存されます。
その画像をsigImageの画像コントロールにバインドするにはどうすればよいですか?
System.Drawing.Image
Source
Image要素のプロパティに適切なタイプではありません。これはWinFormsであり、WPFではありません。
System.Windows.Media.ImageSource
代わりに使用してください
private ImageSource sigImage;
public ImageSource SigImage
{
get { return sigImage; }
set { sigImage = value; RaisePropertyChanged(); }
}
そして、MemoryStreamから直接作成されたプロパティにBitmapImageまたはBitmapFrameを割り当てます。BitmapCacheOption.OnLoad
ビットマップをデコードした直後にストリームを閉じることができるようにするには、を設定する必要があります。
var bitmapImage = new BitmapImage();
using (var memStream = new MemoryStream(binaryData))
{
bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = memStream;
bitmapImage.EndInit();
}
bitmapImage.Freeze();
SigImage = bitmapImage;
SigImage
プロパティを持つクラスのインスタンスがビューのDataContextに割り当てられている場合、バインディングは次のようになります。
<Image Source="{Binding SigImage}"/>
WPFにはstring
、Uri
からbyte[]
への型変換が組み込まれているためImageSource
、ソースプロパティを次のように宣言することもできます。byte[]
private byte[] sigImage;
public byte[] SigImage
{
get { return sigImage; }
set { sigImage = value; RaisePropertyChanged(); }
}
次のような値を割り当てます
SigImage = binaryData;
BitmapImageまたはBitmapFrameを手動で作成したり、バインディングを変更したりする必要はありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加