Bir bitmap'e bir WPF Visual (UserControl) oluşturuyorum ancak sorun, oluşturulmuş görüntünün ölçeklendirilmeden/dönüştürülmeden önce UserControl öğesinin boyutudur. Yani, UserControl'ün 200x200 piksel olarak tasarlandığını varsayalım. BMP'ye verdiğimde, sırasıyla 200 ve 200'ü rapor eden UserControl'ün ActualWidth ve ActualHeightt'ını kullanıyorum. Sorun, UserControl bir Tuval içinde ve 1200 x 1200 (bu değiştirir)Bir WPF Görsel öğesinin ölçeklendirilmiş boyutu nasıl elde edilir
daha yakın bir şey için otomatik boyut (Pencere boyutu ile ölçeklemek/doldurmak için ayarlanır) Bazı okuma ve arama yaptım ve şimdiye kadar yapabilirsiniz Etkili boyutun nasıl belirleneceğini, yani kontrolün ekranda boyandığı boyut olduğunu anlamaya çalışın.
Bu soruya ümitli geldiğim halde geldim, ancak Dönüştürme döndürülen verilerde ölçekleme verisi içermiyor. Peki, ancak her ikisi de 1'dir. Get element position after transform
Oluşturma ölçeklendirmesi için nereye bakmanız gerektiği ile ilgili öneriler harika olurdu!
[GÜNCELLEME] ben ilgili koduyla birlikte ediyorum önerilen gibi:
public static Bitmap PngBitmap(this Visual visual)
{
// Get height and width
int width = (int)(double)visual.GetValue(
FrameworkElement.ActualWidthProperty);
int height = (int)(double)visual.GetValue(
FrameworkElement.ActualHeightProperty);
// Render
RenderTargetBitmap rtb =
new RenderTargetBitmap(
width,
height,
96,
96,
PixelFormats.Default);
rtb.Render(visual);
// Encode
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
System.IO.MemoryStream stream = new System.IO.MemoryStream();
encoder.Save(stream);
// Create Bitmap
Bitmap bmp = new Bitmap(stream);
stream.Close();
return bmp;
}
public static BitmapSource BitmapSource(this Visual visual)
{
Bitmap bmp = visual.PngBitmap();
IntPtr hBitmap = bmp.GetHbitmap();
BitmapSizeOptions sizeOptions = BitmapSizeOptions.FromEmptyOptions();
return Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
sizeOptions);
}
[Güncelleme # 2] Eklendi XAML - Izgara elemanı çok büyük oldu çünkü çıkarılıp gelen edildi benim Klavyenin UserControl dosyasını içeren XAML'in okunması, Kılavuz öğesinin bir parçası DEĞİLDİR.
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:PMD.HECAT.DashboardModule"
xmlns:PMD_HECAT_DashboardModule_VirtualKeyboard="clr-namespace:PMD.HECAT.DashboardModule.VirtualKeyboard"
xmlns:System_Windows_Controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
xmlns:PMD_HECAT_DashboardModule_Input="clr-namespace:PMD.HECAT.DashboardModule.Input"
xmlns:control="clr-namespace:PMD.HECAT.DashboardModule.Controls"
x:Class="PMD.HECAT.DashboardModule.CandidateElectrodeView"
x:Name="UserControl"
mc:Ignorable="d"
d:DesignWidth="1024" d:DesignHeight="768" Width="640" Height="360">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Themes/DashboardStyles.xaml" />
<ResourceDictionary Source="../Themes/ImageButtons.xaml" />
<ResourceDictionary Source="CandidateViewResources.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<UserControl.Triggers>
<EventTrigger RoutedEvent="PMD_HECAT_DashboardModule_VirtualKeyboard:VirtualKeyboardView.KeyboardClose" SourceName="virtualKeyboardView">
<BeginStoryboard Storyboard="{StaticResource OnKeyboardClose1}"/>
</EventTrigger>
</UserControl.Triggers>
<Canvas Width="100" HorizontalAlignment="Left">
<PMD_HECAT_DashboardModule_VirtualKeyboard:VirtualKeyboardView x:Name="virtualKeyboardView" Height="222" Width="550" RenderTransformOrigin="0.5,0.5" Opacity="0" Active="False">
<PMD_HECAT_DashboardModule_VirtualKeyboard:VirtualKeyboardView.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform X="40" Y="400"/>
</TransformGroup>
</PMD_HECAT_DashboardModule_VirtualKeyboard:VirtualKeyboardView.RenderTransform>
</PMD_HECAT_DashboardModule_VirtualKeyboard:VirtualKeyboardView>
<Rectangle Stroke="White" Opacity="0.7" Fill="White" Height="370" Width="654.851" Canvas.Left="687" Canvas.Top="0" />
</Canvas>
</UserControl>
Kontrole ne tür bir dönüşüm uygulanır? LayoutTransform veya/ve RenderTransform? "Otomatik boy" ile ne demek istiyorsun? –
@Erno - Dürüst olmak gerekirse tamamen emin değilim. Ben yeniyim, WPF'ye göre daha yeniyim ve henüz Layout araçlarını anlamadım. UserControl, genişliğini ve yüksekliğini –
olarak genişletmek üzere yapılandırılmış bir Tuval'in içinde yer alıyor ve bize yardım edebilmemiz için kodu bize gösteriyor. –