WPF图片部分显示问题!求高人指点! 50

我欲用WPF做一个扑克牌游戏就是Windows自带的Solitaire游戏的UI界面,需要用到所有扑克牌的图片,Windows库里有一张集所有扑克在一起的一张图片,怎么实... 我欲用WPF做一个扑克牌游戏就是Windows自带的Solitaire游戏的UI界面,需要用到所有扑克牌的图片,Windows库里有一张集所有扑克在一起的一张图片,怎么实现显示上面特定的图片在特定的地点,求高人指点!
就是比如说,你有一张大的图片中,可以剪切为10×10=100张图片(就是照身份证照片时候有很多张头像打印在一张纸上),想取任意一张显示在一个地方,怎么取? 而且要随窗口变化大小也不会改变显示的图片内容,但是大小可以改也可不改。
展开
 我来答
RayNCC
2011-03-04 · TA获得超过615个赞
知道小有建树答主
回答量:452
采纳率:0%
帮助的人:603万
展开全部
先用BitmapImage把那张大图读取出来,然后按照扑克牌图片的大小分割它的PixelArray,接着构造WriteableBitmap写入即可。
更多追问追答
追问
我想把图片依旧保存在那一张图片上,一次性的写入内存,再在内存中调用图片的部分,这样比较节省资源,这个能实现吗?能给出实例代码吗? 那个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;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式