رسم تراكب على صورة
سؤال
لدي صورة يمكن للمستخدم التكبير / التمرير. أرغب في رسم بعض المستطيلات / الدوائر على طبقة مختلفة (على سبيل المثال: رسم دائرة لموجه كل شخص تم تحديده في الصورة).
موقف المستطيل نسبة إلى الصورة.
كيف أقوم بإنشاء مثل هذا التراكب؟
المحلول
لقد تمكنت من القيام بشيء مماثل:
- تعيين صورة كخلفية
- وضع شفافة
ItemsControl
فوقها - تعيين
ItemsControl.ItemsPanel
لCanvas
- كتب معالجات لسحب العمليات
مقتطف الكود:
<ItemsControl x:Name="overlayItemsControl"
Background="Transparent"
ItemsSource="{Binding Path=Blocks}"
Width="{Binding ElementName=imageControl, Path=Width}"
Height="{Binding ElementName=imageControl, Path=Height}"
ItemContainerStyle="{StaticResource rectStyle}"
PreviewMouseMove="ItemsControl_PreviewMouseMove"
PreviewMouseDown="ItemsControl_PreviewMouseDown"
PreviewMouseUp="ItemsControl_PreviewMouseUp"
PreviewKeyDown="ItemsControl_PreviewKeyDown">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
....
</ItemsControl>
نصائح أخرى
طريقة سهلة هي مجرد استخدام قماش وقم بتعيين خاصية خلفية CANVAS في صورتك، ثم ضع دوائرك أو مستطيلاتك على رأس ذلك ووضعها مع خصائص Canvas.left و .top.
<Canvas x:Name="myCanvas">
<Canvas.Background>
<ImageBrush ImageSource="c:\photo.bmp"/>
</Canvas.Background>
<Image Canvas.Top="20" Canvas.Left="20" Height="20" Width="20" Source="c:\circle.bmp"/>
</Canvas>
لا تنتمي إلى StackOverflow