मैं एक बिटमैप पर एक WPF विजुअल (UserControl) प्रस्तुत कर रहा हूं लेकिन समस्या यह है कि प्रस्तुत की गई छवि उपयोगकर्ता नियंत्रण का आकार स्केल/ट्रांसफॉर्म होने से पहले है। तो मान लें कि UserControl 200x200 पिक्सल पर डिज़ाइन किया गया था। जब मैं बीएमपी को प्रस्तुत करता हूं तो मैं UserControl की ActualWidth और ActualHeightt का उपयोग कर रहा हूं जो क्रमश: 200 और 200 की रिपोर्ट करता है। समस्या यह है कि UserControl कैनवास में है और 1200 x 1200 (यह बदलता है)एक WPF दृश्य तत्व के स्केल किए गए आकार को कैसे प्राप्त करें
मैंने कुछ पढ़ने और खोज कर लिया है और अब तक ऑटो आकार (विंडो आकार के साथ स्केल/भरने के लिए सेट) है। प्रभावी आकार को निर्धारित करने के तरीके को समझें, यह आकार स्क्रीन पर नियंत्रण को आकार दिया जा रहा है।
मैं इस प्रश्न पर आया जो आशावादी लग रहा था लेकिन ट्रांसफॉर्म में वापस स्केलिंग डेटा नहीं था। वैसे यह करता है, लेकिन वे दोनों हैं 1. Get element position after transform
रेंडर स्केलिंग के लिए कहां देखना है, इस पर कोई सुझाव बहुत अच्छा होगा!
[अद्यतन] के रूप में सुझाव दिया, मैं प्रासंगिक कोड शामिल कर रहा हूँ:
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);
}
[# अद्यतन 2] जोड़ा गया XAML - क्योंकि यह विशाल था ग्रिड तत्व हटा दिया और से किया गया था मेरी एक्सएएमएल के कैनवास को पढ़ना कीबोर्ड युक्त उपयोगकर्ता नियंत्रण नियंत्रण ग्रिड तत्व का हिस्सा नहीं था।
<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>
नियंत्रण में किस तरह का परिवर्तन लागू किया जाता है? लेआउट ट्रांसफॉर्म या/और रेंडरट्रांसफॉर्म? "ऑटो आकार" से आपका क्या मतलब है? –
@ एर्नो - ईमानदारी से मैं पूरी तरह से यकीन नहीं कर रहा हूँ। मैं नया हूं, मैं WPF से नया हूं और अभी तक लेआउट टूल को समझ नहीं पा रहा हूं। ऐसा प्रतीत होता है कि UserControl एक कैनवास के अंदर है जो चौड़ाई और ऊंचाई –
में फैलाने के लिए कॉन्फ़िगर किया गया है, तो हमें कोड दिखाएं ताकि हम सहायता कर सकें। –