WPF图片部分显示问题!求高人指点! 50
我欲用WPF做一个扑克牌游戏就是Windows自带的Solitaire游戏的UI界面,需要用到所有扑克牌的图片,Windows库里有一张集所有扑克在一起的一张图片,怎么实...
我欲用WPF做一个扑克牌游戏就是Windows自带的Solitaire游戏的UI界面,需要用到所有扑克牌的图片,Windows库里有一张集所有扑克在一起的一张图片,怎么实现显示上面特定的图片在特定的地点,求高人指点!
就是比如说,你有一张大的图片中,可以剪切为10×10=100张图片(就是照身份证照片时候有很多张头像打印在一张纸上),想取任意一张显示在一个地方,怎么取? 而且要随窗口变化大小也不会改变显示的图片内容,但是大小可以改也可不改。 展开
就是比如说,你有一张大的图片中,可以剪切为10×10=100张图片(就是照身份证照片时候有很多张头像打印在一张纸上),想取任意一张显示在一个地方,怎么取? 而且要随窗口变化大小也不会改变显示的图片内容,但是大小可以改也可不改。 展开
1个回答
展开全部
先用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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询