最近私はWPFとC#で作業していました、そして、私はA4ページ(A4のサイズのJPGテンプレート)のためにエディタを作りたかったです
問題は、JPGの特定の場所にテキストを配置し、そのテキストを書くときにそれを表示できるようにすることです(ライブプレビューのように)。
これは私が今までに達成したものです:
XAML
בחר מוצר
באנרים
שקפים וניירות
וינילים
קשיחים הדפסה ישירה
הדבקה
C#
public partial class MainWindow : Window
{
public MainWindow() => InitializeComponent();
DateTime today = DateTime.Today.Date;
String path = @"/Resources/a4.jpg";
Bitmap order = null;
Font f = new Font("Arial", 200, GraphicsUnit.Pixel);
private void getDate(object sender, RoutedEventArgs e)
{
String t = today.ToShortDateString();
todaysDate.Text = t;
}
private void drawSO(object sender, DependencyPropertyChangedEventArgs e)
{
}
private void Button_Click(object sender, RoutedEventArgs e)
{
String orderNum = SO.Text;
using (var stream = File.OpenRead(path))
{
order = (Bitmap)Bitmap.FromStream(stream);
}
using (order)
using (var graphics = Graphics.FromImage(order))
using (f)
{
graphics.DrawString(orderNum, f, System.Drawing.Brushes.White, order.Height/2, order.Width/2);
order.Save(path);
}
}
}
重要なのは、( Button_Click()
でわかるように)ボタンをクリックするだけでプログラムにテキストを書き込ませることですが、私は SO Number <に書き込むテキストを表示したいのですそれを書いている間/ strong>テキストボックス。
テキストを書き込んだときやボタンクリックイベントでしないときに、ウィンドウの画像ビューを更新する方法はありますか。
これが一例です。 テキストボックスに入力したテキストがjpgになるようにします
TextBox
の Text
を使用するには、 TextBlock
の Text
プロパティをバインドするだけです。
そのようです:
UPDATE
コメントと編集した質問の後。
TextBlock
を Image
の後にグリッドで配置してから、すべてのビジュアルを含めて新しいイメージを生成することができます。
これは次のようになります。
次に、このようにjpegとして保存します。
Image myImage = new Image();
FormattedText text = new FormattedText("ABC",
new CultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface(this.FontFamily, FontStyles.Normal, FontWeights.Normal, new
FontStretch()),
this.FontSize,
this.Foreground);
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
drawingContext.DrawText(text, new Point(2, 2));
drawingContext.Close();
RenderTargetBitmap bmp = new RenderTargetBitmap(180, 180, 120, 96,
PixelFormats.Pbgra32);
bmp.Render(drawingVisual);//In here you could just pass the name of the grid "imageToExport"
myImage.Source = bmp;
NOTE
Please note the code for saving the visual is from MSDN
ボタンをクリックするだけでプログラムにテキストを書き込ませることができます(
Button_Click()
を参照)。ただし、SO Numberテキストに書き込んだテキストを表示したいButton
clickイベントではなく、テキストを書き込むときにウィンドウ上の画像ビューを更新する方法はありますか?
Button
の Click
イベントを処理する代わりに、 TextBox
の TextChanged
イベントを処理してください。
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
String orderNum = SO.Text;
using (var stream = File.OpenRead(path))
{
order = (Bitmap)Bitmap.FromStream(stream);
}
using (order)
using (var graphics = Graphics.FromImage(order))
using (f)
{
graphics.DrawString(orderNum, f, System.Drawing.Brushes.White, order.Height/2, order.Width/2);
order.Save(path);
}
}
イベントハンドラはキーを押すたびに呼び出されることに注意してください。パフォーマンス上の理由からこれが望ましくない場合は、 string
プロパティへのバインドを検討し、推奨されているようにある程度の遅延を実装することをお勧めします。/wpf-45バインディングの更新にノイズを減らすための遅延を追加する "rel =" nofollow noreferrer ">こちら
ボタンをクリックするだけでプログラムにテキストを書き込ませることができます(
Button_Click()
を参照)。ただし、SO Numberテキストに書き込んだテキストを表示したいのです。Button
clickイベントではなく、テキストを書き込むときにウィンドウ上の画像ビューを更新する方法はありますか?
Button
の Click
イベントを処理する代わりに、 TextBox
の TextChanged
イベントを処理してみます。
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
String orderNum = SO.Text;
using (var stream = File.OpenRead(path))
{
order = (Bitmap)Bitmap.FromStream(stream);
}
using (order)
using (var graphics = Graphics.FromImage(order))
using (f)
{
graphics.DrawString(orderNum, f, System.Drawing.Brushes.White, order.Height/2, order.Width/2);
order.Save(path);
}
}
イベントハンドラはキーを押すたびに呼び出されることに注意してください。パフォーマンス上の理由からこれが望ましくない場合は、 string
プロパティへのバインドを検討し、推奨されているようにある程度の遅延を実装することをお勧めします。/wpf-45バインディングの更新にノイズを減らすための遅延を追加する "rel =" nofollow noreferrer ">こちら
ボタンをクリックするだけでプログラムにテキストを書き込ませることができます(
Button_Click()
を参照)。ただし、SO Numberテキストに書き込んだテキストを表示したいのです。Button
clickイベントではなく、テキストを書き込むときにウィンドウ上の画像ビューを更新する方法はありますか?
Button
の Click
イベントを処理する代わりに、 TextBox
の TextChanged
イベントを処理してみます。
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
String orderNum = SO.Text;
using (var stream = File.OpenRead(path))
{
order = (Bitmap)Bitmap.FromStream(stream);
}
using (order)
using (var graphics = Graphics.FromImage(order))
using (f)
{
graphics.DrawString(orderNum, f, System.Drawing.Brushes.White, order.Height/2, order.Width/2);
order.Save(path);
}
}
イベントハンドラはキーを押すたびに呼び出されることに注意してください。パフォーマンス上の理由からこれが望ましくない場合は、 string
プロパティへのバインドを検討し、推奨されているようにある程度の遅延を実装することをお勧めします。/wpf-45バインディングの更新にノイズを減らすための遅延を追加する "rel =" nofollow noreferrer ">こちら