VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1453|回复: 10

用GDI+在窗体上的panel控件里画上一张2000像素宽的图片,拖动滚动条时图片画不全,好像是

[复制链接]

1

主题

6

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-9-25 13:30:02 | 显示全部楼层 |阅读模式
用GDI+在窗体上的panel控件里画上一张2000像素宽的图片,拖动滚动条时图片画不全,好像是绘制的慢一样,不能很流畅的滚动图像,向哪个方向拖动哪个方向的图片和窗体边缘之间就有一小段画不上,拖动的很快时,图片和窗体边缘之间画不上图片的面积就大,拖动的慢画不上图片的面积就小, 好像和拖动滚动条的速度也有关系,试了NNNN次了,想了好多办法 还是照旧!实在没办法了!是GDI+的效率问题?不应该吧 画个图都会有这个问题?我想应该还是我的代码哪里有问题,代码如下,忘记说了,我这个窗体是一个子窗体
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace MapEdit
{
    public partial class newMap : Form
    {
        private Image im;//图片对像
               
        private Graphics g;
        private Graphics g1;
        private Bitmap curBitmap;
        
        public newMap(int MapW,int MapH,int TitleW,int TitleH)
        {
            InitializeComponent();

                       
        }
               
        private void newMap_Load(object sender, EventArgs e)
        {
            im = Image.FromFile("image.gif");
            panel1.Width = im.Width;
            panel1.Height = im.Height;
            
            g = this.panel1.CreateGraphics();
            g.Clear(Color.Black);
            curBitmap = new Bitmap(im.Width, im.Height);
            g1 = Graphics.FromImage(curBitmap);
            g1.DrawImage(im, 0, 0, im.Width, im.Height);
        }
        
        private void newMap_Paint(object sender, PaintEventArgs e)
        {
           
            g.DrawImage(curBitmap, 0, 0);
           
        }
        
    }
}
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-9-26 15:30:02 | 显示全部楼层
1\把pictureBox放到panel里,设置panel滚动条为auto
2\建立一个BitMap把图片画到bitmap上
3\picturebox.image=bitmap
不知道我这样说符合你的意思
回复

使用道具 举报

1

主题

6

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-9-26 15:45:01 | 显示全部楼层
我说的不是显示出图片,而是拖动滚动条时,图片滚动不平滑,有时画不到窗体上图片,想知道是不是GDI+效果的原因还是我代码的问题
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-26 16:30:01 | 显示全部楼层
哦,有趣的意思,
我建议可以这样解决.

GDI+绘制到内存画布以后, 让picBox控件指向它, 然后打开picbox的双缓冲. 并且设置滚动条.
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-26 16:45:01 | 显示全部楼层
现在C#GDI+直接绘制的效率确实不高.
回复

使用道具 举报

1

主题

6

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-9-26 17:00:01 | 显示全部楼层
哦,有趣的意思,
我建议可以这样解决.

GDI+绘制到内存画布以后, 让picBox控件指向它, 然后打开picbox的双缓冲. 并且设置滚动条.
------------------
我已经用了双缓冲了 但没效果, 也搞不清原因,我想GDI+的效率不至于低到这个程度吧,所以我想还是我的原因,但搞不明白问题在哪儿,已经困扰我半个月了 :(
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-9-26 17:15:01 | 显示全部楼层
如果是设置picturebox的iamge属性而不是画到panel上还慢的话应该就是控件的问题,而不是GDI的问题了吧?
我用我说的方法画一个象素为7000+的图象,移动起来也没有你说的问题啊,我的cpu只是赛扬2.0
回复

使用道具 举报

1

主题

6

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-9-26 17:30:01 | 显示全部楼层
如果是设置picturebox的iamge属性而不是画到panel上还慢的话应该就是控件的问题,而不是GDI的问题了吧?
我用我说的方法画一个象素为7000+的图象,移动起来也没有你说的问题啊,我的cpu只是赛扬2.0
-----------------------------------
我需要用GDI+能更改图像,用这个方法行不行?  我试试,非常感谢大家!
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-9-26 17:45:01 | 显示全部楼层
更改图象你就更改bmp,然后设置到pictureBox的image属性更新下就好了
回复

使用道具 举报

1

主题

6

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-9-26 18:15:01 | 显示全部楼层
哈哈 用pictureBox设置image属性的办法 可以呀 不再有不平滑的滚动了
谢谢 wxp1281兄弟
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表