WPF图片部分显示问题!求高人指点!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF图片部分显示问题!求高人指点!相关的知识,希望对你有一定的参考价值。
我欲用WPF做一个扑克牌游戏就是Windows自带的Solitaire游戏的UI界面,需要用到所有扑克牌的图片,Windows库里有一张集所有扑克在一起的一张图片,怎么实现显示上面特定的图片在特定的地点,求高人指点!
就是比如说,你有一张大的图片中,可以剪切为10×10=100张图片(就是照身份证照片时候有很多张头像打印在一张纸上),想取任意一张显示在一个地方,怎么取? 而且要随窗口变化大小也不会改变显示的图片内容,但是大小可以改也可不改。
我想把图片依旧保存在那一张图片上,一次性的写入内存,再在内存中调用图片的部分,这样比较节省资源,这个能实现吗?能给出实例代码吗? 那个XAML里应该怎么写?
追答我说的方式就是那种的。给你写了个例子:
public static class ImageService
///
/// 切割一张指定的图片
///
/// 指定的图片源
/// 图块宽度
/// 图块高度
/// 切割好的图片数组(从左往右,从上往下)
public static ImageSource[] SplitImage(BitmapSource source, int tileWidth, int tileHeight)
// 本来对参数有校验代码,结果字数超限了
var colCount = source.PixelWidth / tileWidth;
var rowCount = source.PixelHeight / tileHeight;
var results = new ImageSource[rowCount * colCount];
var stride = tileWidth * ((source.Format.BitsPerPixel + 7) / 8);
var pixelsCount = tileWidth * tileHeight;
var tileRect = new Int32Rect(0, 0, tileWidth, tileHeight);
for (int row = 0; row < rowCount; row++)
for (int col = 0; col < colCount; col++)
var pixels = new int[pixelsCount];
var copyRect = new Int32Rect(col * tileWidth, row * tileHeight, tileWidth, tileHeight);
source.CopyPixels(copyRect, pixels, stride, 0);
var wb = new WriteableBitmap(
tileWidth,
tileHeight,
source.DpiX,
source.DpiY,
source.Format,
source.Palette);
wb.Lock();
wb.WritePixels(tileRect, pixels, stride, 0);
wb.Unlock();
results[row * colCount + col] = wb;
return results;
我对这个图像处理的代码 真的看不懂,你能一步步的标注,然后发到我的邮箱吗? 谢谢了。。。543690817@qq.com 谢谢了
追答已发邮件 :)
cad求高人指点,输入region命令 显示不能创建面域 如图
参考技术A 以下情况是不能创建面域的:1、图形没有封闭;
2、图形有交叉;
3、虽然封闭了,但没有首尾连接。
你把图放大,再看看,有没有上面的情况。追问
非常感谢。有没有什么有效的解决方案啊,俺是个新手……
追答1、用楼下说的BO命令试一下,但碰到没有封闭的情况,这个命令无效,只能对封闭且没有首尾相接的命令有效。
2、用圆角命令(FI)把半径设为0,依次点一下相邻的两条线或弧。
3、还是用放大检查的方法比较快点。用第二条也是一个有效的方法。
1.使用BO 然后点P 然后创建一个边界,把这个边界面域 ,若没出现边界高版本的CAD 会用红圈标出来 在使用楼上的方法。
把红圈的地方该陈封闭不交叉 就OK了 参考技术C 你好,是不是你的图形没有封闭!还有一种,建议你把整个图形都创建成块!也是可以的,希望对你有帮助!
以上是关于WPF图片部分显示问题!求高人指点!的主要内容,如果未能解决你的问题,请参考以下文章
cad求高人指点,输入region命令 显示不能创建面域 如图
安装eclipse之后每次打开弹出两个窗口,不知道是啥意思!求高人指点。。