关于PictureBox.Picture疑问
vb吧
全部回复
仅看楼主
level 7
随心网络 楼主
我在两个PictureBox之间用APIbitblt或PaintPicture来操作修改图像
发现修改后dc正常显示,Image也正常.但SavePicture PictureBox.Picture是原图,PictureBox.Image会有黑块
因为美观问题不想用AutoSize来改PictureBox尺寸
或者图像过大超过控件尺寸,那时候Image也无法完整保存(好像记得是这样这次没实测)
目前就用一个Picture做容器 同样背景色,内部Picture.AutoSize=True,SavePicture是Image属性不是Picture属性
简单来说,Picture属性绘制后SavePicture为什么还是原来的,有什么更简洁的办法?
2018年07月21日 15点07分 1
level 10
如果要处理“大图片”,还是用“GDI对象+API”来操作吧。
你依赖PictureBox控件,毕竟别人“封装”过的,有一些不可控因素。
纯API操作,基本上“一切都在自己的掌控之中”。
2018年07月21日 16点07分 2
挽尊
2018年07月22日 04点07分
level 7
随心网络 楼主
其实大图片很少 都是小图片,只是想知道为什么Picture属性绘制后没变化,那存在的意义是什么,有Image和dc还要他干什么
2018年07月21日 16点07分 3
你可以理解为Picture属性是一个独立的图片文件(只不过是内存中的),对图片框进行绘制操作并不会改变这个文件的内容,改变的是Image属性
2018年07月22日 02点07分
2018年07月22日 04点07分
level 15
好东西
2018年07月22日 00点07分 4
level 11
把autodraw设为true
2018年07月22日 00点07分 5
这个试过的,一样
2018年07月22日 02点07分
level 10
我记得使用api在vb中绘图有两种方法创建绘图句柄,一种是在vb层之下,这种方法使用vb提供的savepicture无论怎么弄保存的都是原图,另一种在vb层之上,可以保存修改后的图片,不过autoredraw要设为true,并refresh一下再保存,而且要保存image属性,具体现在想不起来,晚上回家看
2018年07月22日 03点07分 7
恩必须保存Image,而且不AutoSize保存的Image就有控件背景,图像尺寸=控件尺寸
2018年07月22日 08点07分
level 10
找到了,使用api的方法绘图的话要直接使用picturebox的hdc属性来作为绘图上下文。不要使用hwnd属性另外创建dc,这样的话绘图是不经过vb的,savepicture就不会好使。另外不要保存hdc属性,因为当picturebox大小发生改变时,vb会自动重建它的画布,hdc属性值就会改变。然后把picturebox的autoredraw属性设为true,保存图片前先调用一下refresh,然后用picture1.image属性savepicture就行了,亲测gdi+这样做是可以的,另外vb的savepicture保存的本身就是bmp格式,不支持背景透明,所以无论怎样保存的图片一定是带有背景颜色的~
2018年07月22日 14点07分 8
1