`

Java SWT Image 图像 —— 变灰、变亮变黑、旋转、反色、拉伸、透明叠加

 
阅读更多

图像变灰

图像变灰在桌面应用程序中有着广泛的应用。例如,一个图标被作为一个按钮的背景,我们需要一个灰色效果的图标作为按钮的背景来表示这个按钮处于禁用状态。在SWT中,基于已经存在的图像来创建一个具有灰色效果的图像,我们可以使用构造函数 Image(Display display, Image image, int flag) 来创建,其中参数 flag 使用 SWT.IMAGE_GRAY。

 

例子:

Image newImage = new Image(null, image, SWT.IMAGE_GRAY);

 图像变亮/变黑

下面讨论图像变亮/变黑。 RGB 和 HSL (也叫 HSB/HSV )是两种色彩空间,即:红、绿、蓝( Red, Green, Blue) 和色调、饱和度、亮度( Hue, Saturation, Lightness 或 Brightness 或 Value),前者适用于机器采样,目前的显示器颜色即由这三种基色构成,而后者更符合人类的直观感觉。在 Windows 的标准颜色对话框中均包含这两种表示方法。 RGB 的取值范围在 0~255 之间, HSL 的取值在 0~1 之间。因此我们只需要将 HSL 空间数据的 L 分量进行调整即可调整此图像的亮度。要实现图像变亮/变黑的功能,只需要调整清单 3 中函数 lightImage 行(*)中等号右边的值( 0 到 1 之间)。

 

 例子:

	private static ImageData lightImage(ImageData srcData) {
		double[] data = rgbTohsl(srcData.data);
		byte[] newData = new byte[srcData.data.length];
		int bytesPerPixel = srcData.bytesPerLine / srcData.width;
		int destBytesPerLine = srcData.width * bytesPerPixel;
		for(int i = 0; i < data.length; i += 3) {
			data[i + 2] = 0.75;  ----------------- (*)
		}
		data = hslTorgb(data);
		for(int i = 0; i < srcData.data.length; i ++) {
			newData[i] = (byte)data[i];
		}
		ImageData newImageData = new ImageData(srcData.width, srcData.height,
				srcData.depth,srcData.palette, destBytesPerLine,  newData);
		return newImageData;
	}

 

其中,方法 double[] rgbTohsl(byte[] data) 是把 RGB 空间数据转换到 HSL 空间;相反的,方法 double[] hslTorgb(double[] data) 是把数据从 HSL 空间转换到 RGB 空间。

 

图像旋转

清单4中方法 rotate 实现了将图像相左旋转 90 度。如图 1 ,对于像素点 (x, y) ,向左旋转90 度以后,它在图象中的位置变成了 (y, width - x - 1) 。因此,相左旋转 90 度即将所有的像素点按照规则换一下位置。其他的旋转可用同样的方法。

图1 旋转前与相左旋转 90 度后

旋转前与相左旋转 90 度后

例子:

private static ImageData rotate(ImageData srcData) {
    int bytesPerPixel = srcData.bytesPerLine / srcData.width;
    int destBytesPerLine = srcData.height * bytesPerPixel;
    byte[] newData = new byte[srcData.data.length];
    int width = 0, height = 0;
    for (int srcY = 0; srcY < srcData.height; srcY++) {
      for (int srcX = 0; srcX < srcData.width; srcX++) {
      int destX = 0, destY = 0, destIndex = 0, srcIndex = 0;
      destX = srcY;
      destY = srcData.width - srcX - 1;
      width = srcData.height;
      height = srcData.width;
      destIndex = (destY * destBytesPerLine) + (destX * bytesPerPixel);
      srcIndex = (srcY * srcData.bytesPerLine)  + (srcX * bytesPerPixel);
      System.arraycopy(srcData.data, srcIndex, newData, destIndex, bytesPerPixel);
      }
    }

     return new ImageData(width, height, srcData.depth, srcData.palette,
        destBytesPerLine, newData);
}

 

 

分享到:
评论

相关推荐

    QT+opencv图像点运算,包括图像反色,灰度拉伸,灰度均衡

    在本文中,我们将深入探讨如何使用QT和OpenCV库进行图像点运算,特别是关于图像反色、灰度拉伸和灰度均衡的概念和技术。QT是一个跨平台的应用程序开发框架,而OpenCV则是一个强大的计算机视觉库,两者结合可以提供...

    JAVA 图片反色处理,放大或缩小

    在JAVA编程语言中,处理图像是一项常见的任务,包括图片的反色处理、放大和缩小等操作。这些功能在各种应用场景中都有所应用,比如图像编辑软件、网站开发、数据分析等。下面将详细介绍如何使用JAVA实现这些功能。 ...

    数字图像处理 反色

    在数字图像处理领域,"反色"是一种常见的操作,它涉及到像素值的转换,使得原始图像中的亮区域变成暗区域,而暗区域则变为亮区域。这种操作在图像的对比度增强、视觉效果改变或者某些特定分析应用中非常有用。在本...

    数字图像处理—图像反色

    在灰度图像中,反色则是将灰度值从黑到白或从白到黑进行转换。 图像处理的步骤通常包括读取图像、处理图像和保存图像。在处理图像的阶段,我们可以用编程语言如Python的PIL(Python Imaging Library)或者OpenCV库...

    Bmp图像反色处理

    "Bmp图像反色处理"是指对BMP图像中的像素颜色进行反转,形成与原图色彩相反的效果。256位的Bmp图像指的是每个像素有256种可能的颜色,这通常对应于8位深度的彩色图像,因为2^8=256。这种图像的每个像素由8个二进制位...

    数字图像处理图像的反色代码

    在计算机视觉和图像处理领域,数字图像的反色是一种常见的操作,它将图像中的颜色反转,使得黑色变白色,白色变黑色,同时其他颜色也相应地进行翻转。这种操作通常用于对比度增强或者视觉效果的改变。在这个场景中,...

    图像反色处理的源代码资源

    在图像处理领域,"反色"(Invert Colors)是一种常见的操作,用于将图像中的颜色反转,形成一种对比强烈的视觉效果。反色处理通常应用于艺术创作、数据分析、辅助视觉障碍者理解和显示图像等方面。本资源提供了图像...

    几种效果(模糊,鹰眼,镜头,反色,黑白)的代码

    根据给定的信息,本文将详细解释几种图像处理效果(模糊、鹰眼、镜头、反色、黑白)在J2ME平台上的实现原理及代码逻辑。这些效果广泛应用于移动设备的应用程序开发中,尤其是在游戏和多媒体应用领域。 ### 模糊效果...

    图像处理 反色 C/C++语言实现

    在图像处理领域,"反色"操作是一种常见的图像变换技术,它将图像中的每个像素的颜色反转,形成与原图颜色相反的效果。这种操作在很多场景下都有应用,比如图像调试、对比分析或者艺术效果的创造。本文将深入探讨如何...

    数字图像处理 的C++反色

    在图像处理领域,"反色"是一种常见的操作,它涉及到将图像中的颜色反转,使得原本较亮的部分变暗,而较暗的部分变亮。在C++编程中,我们可以利用MFC(Microsoft Foundation Classes)库来实现这个功能。MFC是微软...

    java 视频反色效果

    在Java编程语言中,实现视频反色效果是一项挑战性的任务,涉及到图像处理和色彩理论的知识。反色,也称为负片效果,是将图像或视频中的颜色反转的过程,通常通过取颜色的补色来实现。在本文中,我们将深入探讨如何在...

    图像的反色

    对于黑白图像(灰度图像),反色就是将像素值从0到255的连续范围转换为它的相反数,即0变255,255变0,中间值对应中间值的补色。 在实际应用中,图像的反色操作可以通过编程语言实现,如Python的PIL库或OpenCV库...

    点运算 图像反色 线性变换 阈值变换 窗口变换 灰度拉伸 灰度均衡.rar

    本项目提供了VS2017编译环境下的代码,能够直接运行并展示图像处理的几个关键操作:图像反色、线性变换、阈值变换、窗口变换、灰度拉伸和灰度均衡。 1. **图像反色**:图像反色是将图像中的每个像素的灰度值取其...

    vpm642图像反色

    在图像处理领域,"图像反色"是一种常见的操作,它涉及到像素值的反转,使得原本颜色较深的区域变浅,而原本颜色较浅的区域变深。在本实验"vpm 642 图像处理实验"中,我们将深入探讨这一概念及其实施方法。 图像反色...

    图像反色源代码

    在计算机图形学中,"图像反色"是一种常见的图像处理技术,它将图像中的颜色反转,使得黑色变为白色,白色变为黑色,以及其他颜色也相应地进行互补变换。这个过程通常用于增强图像的对比度或者在某些情况下进行图像的...

    Vc++图像反色处理

    在计算机视觉和图像处理领域,反色处理是一种常见的图像操作,它通过反转图像中的像素颜色来达到特定的效果。在VC++环境下,我们可以利用MFC(Microsoft Foundation Classes)库或者直接操作位图数据来实现这一功能...

    简易图像编辑程序 包括基本功能:图像缩放(任意比例),旋转(任意角度),反色,翻转

    对比度拉伸是一种增强图像对比度的技术,通过对像素值的重新映射来扩大或缩小亮度范围,使得图像的亮部和暗部更加明显。 滤波变换则是图像处理中的一大类,包括模糊、锐化、边缘检测等多种操作。这些变换通过不同的...

    图片黑白,反色,滤色,翻转,光暗,添加文字

    在图像处理领域,有多种常见的操作可以改变图片的视觉效果,包括将图片转换为黑白、反色、滤色、翻转、调整光暗以及在图片上添加文字等。这些技术广泛应用于数字艺术、设计、摄影后期处理以及各种软件开发中。下面...

    实现测试图像的反色变换

    在图像处理领域,"反色"是一种常见的操作,它能够将图像的颜色模式反转,从而得到与原图颜色相反的效果。这种技术广泛应用于图像分析、视觉艺术以及软件开发中。本项目是在VC6.0集成开发环境中实现的一个图像反色...

    如何以反色方式显示图像

    在编程领域,尤其是在图形处理和图像显示中,"反色"是一种常见的操作,它将图像中的颜色进行反转,使得黑色变为白色,白色变为黑色,其他颜色也相应地反转。在C#这种强大的编程语言中,我们可以利用GDI+(Graphics ...

Global site tag (gtag.js) - Google Analytics