关于WPF内存溢出

publicpartialclassMainWindow:Window{publicMainWindow(){InitializeComponent();this.Win... public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.WindowLayout();
}

void WindowLayout()
{
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
this.Width = 1080;
this.Height = 505;

}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.InitPicRoll();
}
List<BitmapImage> ls_images = new List<BitmapImage>(); //存放图片组
DispatcherTimer t_remain = new DispatcherTimer(); //切换
DispatcherTimer t_roll = new DispatcherTimer(); //滚动
int n_index = 0; //滚动索引
double n_height; //滚动高度
double n_width; //滚动宽度
double n_top; //滚动上边距

void InitPicRoll()
{
string[] img_files = Directory.GetFiles(string.Format("{0}Images", AppDomain.CurrentDomain.SetupInformation.ApplicationBase), "*.jpg");
foreach (string img_path in img_files)
{
ls_images.Add(new BitmapImage(new Uri(img_path, UriKind.Absolute)));

}

n_height = img_roll.Height;
n_width = img_roll.Width;
t_remain.Interval = new TimeSpan(0, 0, 5);
t_remain.Tick += new EventHandler(t_remain_Tick);
t_roll.Interval = new TimeSpan(0, 0, 0, 0, 30);
t_roll.Tick += new EventHandler(t_roll_Tick);
t_remain.Start();
t_roll.Start();
}

void t_remain_Tick(object sender, EventArgs e)
{
n_index = ++n_index % ls_images.Count;
n_top = 0;
t_roll.Start();
}

void t_roll_Tick(object sender, EventArgs e)
{
n_top -= 5;
if (n_top <= -n_width)
{
t_roll.Stop();

}

DrawingVisual drawingVisual = new DrawingVisual();

DrawingContext drawingContext = drawingVisual.RenderOpen();
for (int i = 0; i < 2; i++)
{
drawingContext.DrawImage(ls_images[(n_index + i) % ls_images.Count()], new Rect( n_top + i * n_width,0, 1080, 505));
}
drawingContext.Close();

RenderTargetBitmap composeImage = new RenderTargetBitmap(1080,505, 0, 0, PixelFormats.Pbgra32);
composeImage.Render(drawingVisual);

img_roll.Source = composeImage;

}
}
按F5运行提示内存溢出.求指教
展开
 我来答
greystar_cn
2015-04-09 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部
RenderTargetBitmap composeImage = new RenderTargetBitmap(1080,505, 0, 0, PixelFormats.Pbgra32);
public RenderTargetBitmap(
int pixelWidth,
int pixelHeight,
double dpiX,
double dpiY,
PixelFormat pixelFormat
)

参数
pixelWidth
类型:System.Int32
位图的宽度。

pixelHeight
类型:System.Int32
位图的高度。

dpiX
类型:System.Double
位图的水平 DPI。

dpiY
类型:System.Double
位图的垂直 DPI。

pixelFormat
类型:System.Windows.Media.PixelFormat
位图的格式。

var path = @"E:\Users\Mgen\Pictures\mgenx.jpg";
//读取图像
BitmapSource bitmap = new BitmapImage(new Uri(path, UriKind.Absolute));
//创建RenderTargetBitmap
var rtbitmap = new RenderTargetBitmap(bitmap.PixelWidth,
bitmap.PixelHeight,
bitmap.DpiX,
bitmap.DpiY,
PixelFormats.Default);
追问
前提要在不改变图片的大小情况下.应该怎么弄?是不是有一个释放内存的方法?应该怎么写呢?
追答
var rtbitmap = new RenderTargetBitmap(bitmap.PixelWidth,
bitmap.PixelHeight,//取你原图的相关参数值
bitmap.DpiX,//取你原图的相关参数值
bitmap.DpiY, //取你原图的相关参数值
PixelFormats.Default);

不改变,
你试过还有内存出错吗?
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式