`
liugang594
  • 浏览: 990836 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

不规则窗体

SUN 
阅读更多

从JDK1.6好像是第10个updat版本开始,就可以使用com.sun.awt.AWTUtilities,去创建透明窗体和不规则窗体。例如要显示一张不规则图片,可以如下做:

 

		JFrame jFrame = new JFrame();
		jFrame.setUndecorated(true);
		final ImageIcon imageIcon = ...;
		final JPanel jLabel = new JPanel() {
			@Override
			protected void paintComponent(Graphics g) {
				g.drawImage(imageIcon.getImage(), 0, 0, null);
			}
		};
		AWTUtilities.setWindowOpaque(jFrame, false);
		jFrame.getContentPane().add(jLabel);

 

这个窗体很好的显示了原图片,包括不规则性和透明性。

 

不过在SWT中,这个问题却不容易解决,我不知道有哪个现成的方法可以简单的实现。唯一可以用的就是Shell的setRegion(Region)方法。

 

网上有一段代码如下:

 

		Region region = new Region();
		final ImageData imageData = image.getImageData();
		if (imageData.alphaData != null) {
			Rectangle pixel = new Rectangle(0, 0, 1, 1);
			for (int y = 0; y < imageData.height; y++) {
				for (int x = 0; x < imageData.width; x++) {
					if (imageData.getAlpha(x, y) == 255) {
						pixel.x = imageData.x + x;
						pixel.y = imageData.y + y;
						region.add(pixel);
					} 
				}
			}
		} else {
			ImageData mask = imageData.getTransparencyMask();
			Rectangle pixel = new Rectangle(0, 0, 1, 1);
			for (int y = 0; y < mask.height; y++) {
				for (int x = 0; x < mask.width; x++) {
					if (mask.getPixel(x, y) != 0) {
						pixel.x = imageData.x + x;
						pixel.y = imageData.y + y;
						region.add(pixel);
					}
				}
			}
		}
		shell.setRegion(region);

 

通过按点计算Region,构造出shell的region出来,然后将图画出来:

 

if (e.type == SWT.Paint) {
					e.gc.drawImage(image, imageData.x, imageData.y);
				}

 

不过这并不是一个细致的过程,最大的一个问题就是图片原有的透明性丢失,如果原图中有些点是不完全不透明或说不完全透明,则最后显示出来的结果中不能体现这一点。

 

 

分享到:
评论

相关推荐

    不规则窗体不规则窗体不规则窗体

    在IT行业中,"不规则窗体"通常是指在软件或应用程序设计中,那些形状或边界不是标准矩形的用户界面元素。这些窗体可以是椭圆形、多边形或者其他自定义形状,旨在提供更加独特、视觉吸引人的用户体验,或者是为了适应...

    VB 不规则窗体

    在VB(Visual Basic)编程环境中,不规则窗体是指那些形状不再局限于标准矩形的窗口。常规的VB窗体遵循Windows API的规范,通常呈现为四边直角的形状。然而,通过一些特殊的技术,我们可以创建具有任意形状的不规则...

    C#创建不规则窗体

    在C#编程中,WinForms是一个用于构建桌面应用程序的强大框架。它允许开发者创建具有丰富用户界面的...在提供的压缩包文件中,包含了创建不规则窗体的工程文件,可以直接运行查看示例效果,也可以作为学习和开发的起点。

    Vb制作不规则窗体(。。。。。。。。。)

    在VB(Visual Basic)编程中,创建不规则窗体是一个有趣且富有挑战性的任务,它涉及到Windows API(应用程序接口)的使用以及图形处理技术。不规则窗体允许开发者设计出打破常规,拥有独特外观和交互体验的应用程序...

    C#不规则窗体(可拖动)

    "C#不规则窗体(可拖动)"这个主题就涉及到了这样的技术。下面将详细阐述如何在C#中实现这种功能。 首先,我们需要了解常规的Windows窗体。在C#中,通常使用`System.Windows.Forms.Form`类来创建基本的窗口。默认情况...

    不规则窗体WPF

    在Windows Presentation Foundation (WPF) 中,不规则窗体(又称形状窗体或自定义形状窗体)是指那些不遵循标准矩形外观的窗口。这种技术允许开发者创建具有独特视觉效果的应用程序,如心形、星形或其他任意形状的...

    excel vba 不规则窗体美化 极酷窗体效果 窗体添加菜单 快捷键大全

    在Excel VBA编程中,创建不规则窗体的美化与极酷效果,是提升用户界面体验的重要手段。窗体的美观不仅能够增加用户的操作兴趣,还可以使得程序更加专业和易于接受。下面我们将深入探讨如何利用VBA实现这些功能,包括...

    vb创建不规则窗体

    在VB(Visual Basic)编程中,创建不规则窗体是一项高级技术,允许开发者设计出具有非标准形状的应用程序窗口。不规则窗体突破了传统矩形窗口的限制,可以实现如半透明、圆角或者自定义形状的效果,为用户提供更个性...

    c++ builder 不规则窗体显示代码

    在C++ Builder 6.0开发环境中,创建不规则窗体(irregular form)是指能够自定义窗口边界的窗体,通常用于实现如半透明、带有复杂形状或动态形状的窗口。这种技术允许开发者打破传统的矩形窗口限制,提供更加个性化...

    C#不规则窗体_实现

    "C#不规则窗体_实现"这个主题涉及到Windows Forms应用程序中一个独特的特性——自定义形状的窗口,即不规则窗体。不规则窗体允许开发者创建非矩形的窗口,这些窗口可以具有任意形状,超出常规的四边形限制,从而为...

    VC创建不规则窗体

    在VC++(Visual C++)开发环境中,创建不规则窗体是实现个性化用户界面的一种方法。不规则窗体,也称为自定义形状窗体,允许开发者摆脱传统的矩形边界,设计出具有多边形或其他非标准形状的窗口。这种技术在游戏、...

    不规则窗体的创建

    在VC++编程环境中,创建不规则窗体是一项高级技术,它允许开发者打破传统的矩形窗口限制,设计出具有个性化形状的窗口,如椭圆、位图或其他自定义形状。这通常涉及到Windows API函数的深入使用,尤其是GDI(Graphics...

    VC自定义不规则窗体

    在Windows编程中,"VC自定义不规则窗体"是一个高级话题,涉及到Windows API和MFC(Microsoft Foundation Classes)库的深入使用。不规则窗体,即非标准形状的窗口,能够实现各种复杂的界面效果,比如窗口的部分透明...

    Winform不规则窗体

    在C# Winform开发中,创建不规则窗体是一项高级技术,它允许开发者设计出具有非标准形状的应用程序窗口,从而提升用户界面的创新性和吸引力。本文将详细讲解两种实现不规则窗体的方法:UpdateLayeredWindow方式和...

    不规则窗体&异形窗体

    在编程领域,尤其是在Windows应用程序开发中,"不规则窗体"和"异形窗体"是一种独特的设计概念,它们允许开发者创建超出常规矩形形状的窗口界面,为用户提供更加个性化和吸引人的视觉体验。在本篇文章中,我们将深入...

    VC不规则窗体测试

    在VC++编程环境中,开发一个不规则窗体(irregular window)是指创建一个不遵循标准窗口边框和标题栏规则的窗口。这种窗体通常用于实现自定义的用户界面元素,比如游戏窗口或者某些特殊应用的界面。在这个“VC不规则...

    MFC 绘制不规则窗体 示例代码

    本示例代码着重展示了如何利用MFC来实现一个不规则形状的窗体,即“不规则窗体”。不规则窗体通常指的是那些形状不再局限于标准矩形的窗口,可以依据特定的图像或其他规则进行绘制,呈现出更为独特的视觉效果。这种...

    Qt不规则窗体的实现

    【Qt不规则窗体的实现】是Qt编程中一种高级的GUI特效,它允许开发者创建具有独特形状和外观的窗口,突破传统矩形边框的限制。Qt提供了两种实现不规则窗体的方法,分别适用于Qt3和Qt4版本。本文将详细介绍如何在Qt中...

    WinForm例子 不规则窗体 C#

    "不规则窗体"是指那些不遵循标准矩形形状的窗口,它可以是任意形状,如圆形、星形或其他自定义图形。这样的设计可以为应用程序提供独特的视觉效果和用户体验。 创建不规则窗体的核心在于覆盖WinForm的默认绘图机制...

Global site tag (gtag.js) - Google Analytics