Silverlight 3 Beta 新特性解析(2)-Graphics篇
如何利用新的Bitmap API来创建我们自己的图像透视3D图像(Perspective 3D Graphic)像素模糊和投影效果Element-To-Element BindingBitmap API的写图像功能新版的Bitmap API支持从写每个像素的值来创建自己的图像这个用来支持生成Bitmap的类叫做WriteableBitmap继承自BitmapSource类这个类位于System.Windows.Media.Imaging名字空间中其函数成员包括1: public sealed class WriteableBitmap : BitmapSource2: {3: public WriteableBitmap(BitmapSource source);4: public WriteableBitmap(int pixelWidth, int pixelHeight, PixelFormat format);5: public int this[int index] { get; set; }6: public void Invalidate();7: public void Lock();8: public void Render(UIElement element, Transform transform);9: public void Unlock();10: }从上图可以看出我们可以通过两种形式来实例化这个WriteableBitmap一个是通过传入已经初始化了的BitmapSource另外一个是通过输入图像高度和宽度以及像素类型有Bgr32和Pbgra32两种后面一种可以创建半透明图像第5行的索引this[int index]可以用来读或取像素点写一个WriteableBitmap的流程是这样的实例化WriteableBitmap调用Lock方法写像素点调用Invalidate方法最后是调用Unlock方式来释放所有的Buffer并准备显示如下文所示以描点的方式构建了整个Bgr32图像1: private WriteableBitmap BuildTheImage(int width, int height)2: {3: WriteableBitmap wBitmapnew WriteableBitmap(width,height,PixelFormats.Bgr32);4: wBitmap.Lock();5:6: for (int x 0; x width; x)7: {8: for (int y 0; y height; y)9: {10: byte[] brg new byte[4];11: brg[0](byte)(Math.Pow(x,2) % 255); //Blue, B12: brg[1] (byte)(Math.Pow(y,2) % 255); //Green, G13: brg[2] (byte)((Math.Pow(x, 2) Math.Pow(y, 2)) % 255); //Red, R14: brg[3] 0;15:16: int pixel BitConverter.ToInt32(brg, 0);17:18: wBitmap[y * height x] pixel;19: }20: }21:22: wBitmap.Invalidate();23: wBitmap.Unlock();24:25: return wBitmap;26: }画出来的图像如下图所示很神奇的一个改进。有了这个类我们就可以操纵像素点了在微软上对图像处理做些应用比如去红点等功能透视3D效果所有继承自System.Windows.UIElement的类都将含有Projection这个属性也就是说我们看到的所有控件都将具有3D功能你可以通过沿X轴Y轴或者Z轴旋转任意角度来获得3D效果如将上面生成的图片沿X轴旋转-20度我们可以得到其默认的旋转轴心是CenterOfRotationX0.5,CenterOfRotationY0.5,CenterOfRotationZ0上面的旋转代码如下:1: Image x:NameImg2: Image.Projection3: PlaneProjection x:NameImageProjection RotationX-20/4: /Image.Projection5: /Image其他空间的3D平面投影与此类似像素模糊和投影效果与Projection一样Effect属性也是在System.Windows.UIElement所以所有的Toolbar中的控件都支持像素模糊和投影效果模糊和投影效果(BlurEffect and DropShadowEffect)都在System.Windows.Media.Effects这个名字空间中整个控件模糊效果的程度由Radius来控制其默认值为5Radius越大应用了BlurEffect的控件越模糊代码如下1: Slider2: Slider.Effect3: BlurEffect Radius20/4: /Slider.Effect5: /Slider投影效果的参数比模糊效果复杂些共有5个属性来控制投影效果BlurRadius用来控制控件边缘的模糊度值越大边缘越模糊默认值仍然是5Color属性用来设置投影的颜色默认颜色是黑色Direction属性用来控制投影方向值为0时代表投影到控件的正右方以逆时针的形式来增大投影角度默认值为315值的范围只能在0~360之间Opacity属性用来控制边缘的透明度其使用而控件的Opacity属性一样ShadowDepth属性用来设置投影平面和控件平面的垂直距离默认值为5其值范围为0~300其代码如下1: Slider2: Slider.Effect3: DropShadowEffect BlurRadius5 ColorWhite Opacity0.7 ShadowDepth7/4: /Slider.Effect5: /SliderElement-To-Element Binding元素和元素之间的属性绑定是首先在WPF中实现的现在Silverlight 3终于把这个实用的功能引入了绑定的格式如{Binding 属性名,Mode绑定模式,ElementName绑定元素}其中绑定元素就是你先绑定的元素的名字属性名是你想绑定的元素的属性名这样将把被绑定的元素的绑定属性的值绑定给新元素的属性最后绑定模式有两种OneWay和TwoWayTwoWay表示有一方的绑定属性的值改变了两边的值都同步更新而OneWay表现只在被绑定元素的属性值改变后绑定元素的属性值才改变而反之不成立如下代码1: Image Width400 Height400 x:NameImg2: Image.Projection3: PlaneProjection x:NameImageProjection/4: /Image.Projection5: /Image6: Slider x:NamePlotX Minimum-90 Maximum90 Value{Binding RotationX, ModeTwoWay, ElementNameImageProjection}/7: Slider x:NamePlotY Minimum-90 Maximum90 Value{Binding RotationY, ModeTwoWay, ElementNameImageProjection}/8: Slider x:NamePlotZ Minimum-90 Maximum90 Value{Binding RotationZ, ModeTwoWay, ElementNameImageProjection}/是用了三个Slider来绑定控制Image的3D效果效果图如下

相关新闻

UNet++ 深度监督与剪枝实战:在细胞分割数据集上实现 3 种剪枝策略对比

UNet++ 深度监督与剪枝实战:在细胞分割数据集上实现 3 种剪枝策略对比

UNet深度监督与剪枝实战:3种策略在细胞分割中的量化对比1. 深度监督与模型剪枝的核心价值医学图像分割领域近年来最显著的突破之一,就是UNet提出的深度监督机制及其衍生的模型剪枝能力。传统UNet架构虽然通过编码器-解码器结构和跳跃连接实现了较好的分割…

2026/7/7 6:48:17阅读更多 →
信创市场CPU选型指南:华为、飞腾、海光、龙芯等6厂商2024年性能与生态实测对比

信创市场CPU选型指南:华为、飞腾、海光、龙芯等6厂商2024年性能与生态实测对比

信创CPU选型实战指南:六大国产处理器2024年性能与生态深度评测在信息技术应用创新(信创)产业快速发展的背景下,国产CPU正迎来前所未有的发展机遇。面对华为鲲鹏920、飞腾S5000、海光3号、龙芯3A6000、兆芯KX-7000等主流国产处理器…

2026/7/7 6:48:17阅读更多 →
.NET 10 的正则性能现在什么水平?我拿它和 Go、Python、C++、PCRE2 测了一轮

.NET 10 的正则性能现在什么水平?我拿它和 Go、Python、C++、PCRE2 测了一轮

所以我没有试图“复现原文结果”。原文数据不公开,就没法严肃复现。我这里做的是另一件事:用公开、确定性的规则合成一份数据,然后把所有代码放出来,让别人可以重新跑。数据生成脚本在仓库里,规则很简单:生…

2026/7/7 6:43:17阅读更多 →
【昇腾】在华为昇腾 910B4 上使用 vllm-ascend 跑通 Gemma 4 31B 全记录

【昇腾】在华为昇腾 910B4 上使用 vllm-ascend 跑通 Gemma 4 31B 全记录

前提:本文写在 vllm-ascend:nightly-releases-v0.22.1rc-openeuler 发布的时候,这个时候 vllm-ascend 官方还没有支持 gemma 4,但官方 github 中已经有关于 gemma 4 的 PR:https://github.com/vllm-project/vllm-ascend/pull/9222…

2026/7/7 7:53:20阅读更多 →
计算机毕业设计之基于yolov8的服装检测识别

计算机毕业设计之基于yolov8的服装检测识别

随着电子商务和智能零售的兴起,服装检测识别技术在提升购物体验和优化供应链管理中扮演着重要角色。yolov8作为一种先进的深度学习目标检测算法,为服装检测识别领域带来了新的突破。本文旨在探讨基于yolov8的服装检测识别技术,概述其算法原理…

2026/7/7 7:53:20阅读更多 →
Ubuntu 22.04 安装 MATLAB R2025a 全流程故障预判与 GUI 稳定性加固

Ubuntu 22.04 安装 MATLAB R2025a 全流程故障预判与 GUI 稳定性加固

1. 为什么在 Ubuntu 22.04 上装 MATLAB R2025a 不是“点下一步”那么简单你搜到这个标题,大概率正卡在某个环节:下载完安装包双击没反应、终端里敲./install报一堆 Java 错误、装完启动时弹出“License Manager Error”、或者更糟——MATLAB 窗口开了但菜…

2026/7/7 7:53:20阅读更多 →
Minecraft基岩版启动器完全指南:如何免费管理多版本游戏

Minecraft基岩版启动器完全指南:如何免费管理多版本游戏

Minecraft基岩版启动器完全指南:如何免费管理多版本游戏 【免费下载链接】BedrockLauncher 项目地址: https://gitcode.com/gh_mirrors/be/BedrockLauncher BedrockLauncher是一款功能强大的Minecraft基岩版启动器,专为Windows平台设计&#xff…

2026/7/7 7:53:20阅读更多 →
打通AI的工具生态-MCP协议实战

打通AI的工具生态-MCP协议实战

一篇文章的Function Calling让AI获得了"做事"的能力。但你可能注意到了一个问题: // Function Calling:工具在编译时就写死了 var options new ChatOptions {Tools [AIFunctionFactory.Create(GetWeatherInfo), // 写死在代码里AIFunction…

2026/7/7 7:53:20阅读更多 →
Agentic AI与低代码平台融合:企业智能体应用构建指南

Agentic AI与低代码平台融合:企业智能体应用构建指南

前言 Fortune Business Insights报告显示,全球Agentic AI市场从2025年72.9亿美元→2026年91.4亿美元→2034年1391.9亿美元。Gartner判断2026年40%企业级应用将内置AI智能体(2025年不到5%),但同时超40%的Agentic AI项目将因成本失控…

2026/7/7 7:48:20阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/7 4:43:43阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/7 5:11:21阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →