积极答复者
Rectangle 和 Image中的图片消失

问题
-
在做一个silverlight 项目中:
一个Canvas里有多个Rectangle ,在 Rectangle 里 Fill 一个 ImageBrush,(多个矩形共用一个ImageBrush),后,多次设置 Rectangle 的"Canvas.LeftProperty"和"Canvas.TopProperty"属性后,原本的图片ImageBrush 变成了实色(图片为单色图案,png格式,带透明),颜色为图片的颜色.不知道为何,再多次设置"Canvas.LeftProperty"和"Canvas.TopProperty"属性后又可以正常显示. 这是变成实色的情况 ,也遇到有图片消失,但Rectangle 还在(鼠标事件存在)的情况. 另外在Image控件里Fill的图片也遇到了消失的情况.图片消失后能看到有一个像素高的线,长度为image控件或是矩形的宽度. 请教如何解决这种情况.
注:Rectangle 和 image 的位置会随着比例尺的缩放而在canvas中变化,其位置的值在相同的比例尺下是确定的.
开发工具:vs2010, sl 4
2011年1月12日 15:27
答案
-
BitmapSource共享问题是出在Silverlight2时代,我不能确定是否Silverlight4也有类似问题。
Image主要是内存占用问题,BitmapImage是以Bitmap的形式存放图像数据,因此若读取一张1024×1024的图片,即使把它显示在UI上只有10×10大,但它内存占用量仍为4MB。而若读取的源图为10×10,则实际内存占用量为400Byte,即使你创建1000个bitmapimage,内存占用量仍为400KB。
我看你的图片显示大小应该不大吧,只要你选择大小合适的图像源,为每个图像创建单独Source应该不会造成性能问题。
Mog Liang
Please mark the replies as answers if they help or unmark if not.
If you have any feedback about my replies, please contact msdnmg@microsoft.com.
Microsoft One Code Framework- 已标记为答案 大紫杉 2011年1月18日 1:11
2011年1月13日 9:56
全部回复
-
还遇到更精彩的是,屏幕上一半是正常的一半是实色的.如以下连接地址图片
http://yew4.org/_otherfiles/3.jpg2011年1月12日 15:33 -
问题可能出在BitmapImage共享上,为每个Rectangle创建单独的ImageBrush以及BitmapImage应该能解决问题。
Mog Liang
Please mark the replies as answers if they help or unmark if not.
If you have any feedback about my replies, please contact msdnmg@microsoft.com.
Microsoft One Code Framework2011年1月13日 7:39 -
BitmapSource共享问题是出在Silverlight2时代,我不能确定是否Silverlight4也有类似问题。
Image主要是内存占用问题,BitmapImage是以Bitmap的形式存放图像数据,因此若读取一张1024×1024的图片,即使把它显示在UI上只有10×10大,但它内存占用量仍为4MB。而若读取的源图为10×10,则实际内存占用量为400Byte,即使你创建1000个bitmapimage,内存占用量仍为400KB。
我看你的图片显示大小应该不大吧,只要你选择大小合适的图像源,为每个图像创建单独Source应该不会造成性能问题。
Mog Liang
Please mark the replies as answers if they help or unmark if not.
If you have any feedback about my replies, please contact msdnmg@microsoft.com.
Microsoft One Code Framework- 已标记为答案 大紫杉 2011年1月18日 1:11
2011年1月13日 9:56 -
为每个Image创建单独的BitmapImage是否能解决你最初的问题?图像形式简单的话,可考虑使用Path来制作图标。
Mog Liang
Please mark the replies as answers if they help or unmark if not.
If you have any feedback about my replies, please contact msdnmg@microsoft.com.
Microsoft One Code Framework2011年1月14日 2:59