请问如何获取已经设置BackgroundImageLayout属性的BackgroundImage

shijianmin1992 2021-05-21 11:38:38
假如button1控件设置了BackgroundImage,但是图片太大,于是设置BackgroundImageLayout属性为Zoom。在代码中取控件的背景图片时:button1.BackgroundImage,取出的图片仍然是初始的大图片;求教怎么取出经过Zoom缩放过的图片,谢谢解答!
...全文
23481 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
shijianmin1992 2021-05-26
  • 打赏
  • 举报
回复
引用 18 楼 xuzuning 的回复:
OnPaint 绘制主体
OnPaintBackground 绘制背景

你究竟是想做什么呢?可否明示一下?
我想把图片显示到控件上,然后把不透明的部分扣掉,所以需要取出来实际显示在控件上的图片;现在想的是重写一下按钮控件,在按钮缩放的时候自己控制缩放图片,然后用Region抠按钮
xuzuning 2021-05-26
  • 打赏
  • 举报
回复
OnPaint 绘制主体 OnPaintBackground 绘制背景 你究竟是想做什么呢?可否明示一下?
shijianmin1992 2021-05-26
  • 打赏
  • 举报
回复
引用 14 楼 desperaso 的回复:
接上面:BackgroundImageLayout坐标就是0、组件宽度、组件高度等,如果有边框减去个边框宽度,然后套个图像进去
我现在想直接重写下控件,自己写缩放图片,现在找不到合适的事件
shijianmin1992 2021-05-26
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
你若重写的话 当然是 paint shijian啦
每个控件都有 DrawToBitmap 方法共编程截图时使用
版主大佬,paint这个事件在我还没填充背景的时候就调用了,现在我换成OnResize事件了,在控件大小改变的时候,这个事件为什么会执行两次呢
shijianmin1992 2021-05-26
  • 打赏
  • 举报
回复
引用 14 楼 desperaso 的回复:
接上面:BackgroundImageLayout坐标就是0、组件宽度、组件高度等,如果有边框减去个边框宽度,然后套个图像进去
这个我在代码里试了,总是匹配不上按钮的大小
desperaso 2021-05-25
  • 打赏
  • 举报
回复
接上面:BackgroundImageLayout坐标就是0、组件宽度、组件高度等,如果有边框减去个边框宽度,然后套个图像进去
desperaso 2021-05-25
  • 打赏
  • 举报
回复
引用 10 楼 shijianmin1992 的回复:
谢谢,这个可以缩放图片,但是不知道BackgroundImageLayout属性的四个顶点在哪,我试了下,缩放比例和位置不对
那个是四顶点变形图像,可以缩放,也可以变形,顶点在代码里面的 filters[num].VertexLeftTop = corners[num, 0];//左上 filters[num].VertexTopRight = corners[num, 1];//右上 filters[num].VertexBottomLeft = corners[num, 2];//左下 filters[num].VertexRightBottom = corners[num, 3];//右下 里面生成的是180副图像,单幅图直接.VertexLeftTop、.VertexTopRight等。 改自CodeProject里面经典的图像变形代码,没什么问题
xuzuning 2021-05-25
  • 打赏
  • 举报
回复
你若重写的话 当然是 paint shijian啦 每个控件都有 DrawToBitmap 方法共编程截图时使用
shijianmin1992 2021-05-25
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
你的问题只不过是如何缩小图片, 与BackgroundImageLayout 和 BackgroundImageLayout属性为Zoom并无什么关系
或是说你想自己实现 BackgroundImageLayout.Zoom

var bm = new Bitmap("图片文件名");

var thumbnail = new Bitmap(bm, 需要的宽度.需要的高度);
请问大佬,重写button的话,设置BackgroundImageLayout后改变控件大小图片变化的事件是哪个呢?
shijianmin1992 2021-05-25
  • 打赏
  • 举报
回复
引用 9 楼 desperaso 的回复:
[quote=引用 6 楼 shijianmin1992 的回复:]这个取出的图像是按钮的图片了,如果背景图有一部分是透明的,取完后变得都不透明了


这样子可以不。
按照给出的4个点坐标,随意放大缩小图像,
就算是梯形、三角形什么的,只要有4个坐标都可以按照原图生成,可以透明。

链接:https://pan.baidu.com/s/1TKAStVhpYCeeRTzYviRVuA
提取码:v1pk

里面3D什么的不用看了,就
FreeTransform.cs
ImageData.cs
[/quote]谢谢,这个可以缩放图片,但是不知道BackgroundImageLayout属性的四个顶点在哪,我试了下,缩放比例和位置不对
shijianmin1992 2021-05-24
  • 打赏
  • 举报
回复
引用 4 楼 morliz子轩 的回复:
[quote=引用 2 楼 shijianmin1992 的回复:][quote=引用 1 楼 morliz子轩 的回复:]

Image CurrentImag = Button1.BackgroundImage;
这样取出的图片是原始分辨率图片,不是经过缩放后显示在控件上的图片[/quote]

放进去的图片,只是做了比例调整,并未压缩。肯定需要代码来处理尺寸大小。
你试试楼上这位仁兄的方法。[/quote]楼上哥们取出的图像是按钮的图片了,如果背景图有一部分是透明的,取完后变得都不透明了
shijianmin1992 2021-05-24
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
你的问题只不过是如何缩小图片, 与BackgroundImageLayout 和 BackgroundImageLayout属性为Zoom并无什么关系
或是说你想自己实现 BackgroundImageLayout.Zoom

var bm = new Bitmap("图片文件名");

var thumbnail = new Bitmap(bm, 需要的宽度.需要的高度);
我想知道怎么缩放成BackgroundImageLayout属性的效果而且button默认样式是有边框的,边框的像素应该没有加上去
shijianmin1992 2021-05-24
  • 打赏
  • 举报
回复
引用 3 楼 desperaso 的回复:

Bitmap bitmap = new Bitmap(button.Width, button.Height);
button.DrawToBitmap(bitmap, button.ClientRectangle);
bitmap.Save("图像.png");
这个取出的图像是按钮的图片了,如果背景图有一部分是透明的,取完后变得都不透明了
desperaso 2021-05-24
  • 打赏
  • 举报
回复
引用 6 楼 shijianmin1992 的回复:
这个取出的图像是按钮的图片了,如果背景图有一部分是透明的,取完后变得都不透明了
这样子可以不。 按照给出的4个点坐标,随意放大缩小图像, 就算是梯形、三角形什么的,只要有4个坐标都可以按照原图生成,可以透明。 链接:https://pan.baidu.com/s/1TKAStVhpYCeeRTzYviRVuA 提取码:v1pk 里面3D什么的不用看了,就 FreeTransform.cs ImageData.cs
xuzuning 2021-05-23
  • 打赏
  • 举报
回复
你的问题只不过是如何缩小图片, 与BackgroundImageLayout 和 BackgroundImageLayout属性为Zoom并无什么关系 或是说你想自己实现 BackgroundImageLayout.Zoom var bm = new Bitmap("图片文件名"); var thumbnail = new Bitmap(bm, 需要的宽度.需要的高度);
morliz子轩 2021-05-22
  • 打赏
  • 举报
回复
引用 2 楼 shijianmin1992 的回复:
[quote=引用 1 楼 morliz子轩 的回复:]

Image CurrentImag = Button1.BackgroundImage;
这样取出的图片是原始分辨率图片,不是经过缩放后显示在控件上的图片[/quote] 放进去的图片,只是做了比例调整,并未压缩。肯定需要代码来处理尺寸大小。 你试试楼上这位仁兄的方法。
desperaso 2021-05-22
  • 打赏
  • 举报
回复

Bitmap bitmap = new Bitmap(button.Width, button.Height);
button.DrawToBitmap(bitmap, button.ClientRectangle);
bitmap.Save("图像.png");
shijianmin1992 2021-05-22
  • 打赏
  • 举报
回复
引用 1 楼 morliz子轩 的回复:

Image CurrentImag = Button1.BackgroundImage;
这样取出的图片是原始分辨率图片,不是经过缩放后显示在控件上的图片
morliz子轩 2021-05-22
  • 打赏
  • 举报
回复

Image CurrentImag = Button1.BackgroundImage;

111,086

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧