图像变灰

图像变灰在桌面应用程序中有着广泛的应用。例如,一个图标被作为一个按钮的背景,我们需要一个灰色效果的图标作为按钮的背景来表示这个按钮处于禁用状态。在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 度后

例子:

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);

}

java image 反色_Java SWT Image 图像 —— 变灰、变亮变黑、旋转、反色、拉伸、透明叠加...相关推荐

  1. java swt 不显示图片_Java SWT按钮图像未刷新

    我在按钮中显示图像,单击该按钮会打开一个复合图像,使我可以选择另一张图片用于该按钮.执行保存操作后,下面的代码将调整图片大小并将其保存到目录中.然后加载重新加载复合材料.当组合加载时,按钮会根据用户正 ...

  2. java jpanel添加背景_java – 将背景图像添加到JPanel

    我正在用 Java构建棋盘游戏.对于游戏板本身,我试图将板的图像作为整个JPanel的背景,填充JFrame.我找到了一种方法来做到这一点,但只有本地存储的文件,它需要能够从GUI内部的图像中获取图像 ...

  3. java图片镜像代码_Java OpenCV实现图像镜像翻转效果

    本文实例为大家分享了Java OpenCV实现图像镜像翻转效果的具体代码,供大家参考,具体内容如下 主要使用OpenCV的flip()方法,可以实现图像的垂直.水平以及同时垂直镜像翻转. flip是C ...

  4. java ocr数字识别_Java OCR tesseract 图像智能文字字符识别技术实例代码

    接着上一篇OCR所说的,上一篇给大家介绍了tesseract 在命令行的简单用法,当然了要继承到我们的程序中,还是需要代码实现的,下面给大家分享下Java实现的例子. 拿代码扫描上面的图片,然后输出结 ...

  5. java 缩放图片 锯齿_Java Image Filters 图像缩放质量差的问题解决

    Java Image Filters 提供一个用来处理图像缩放的 Filter 类:ScaleFilter,用法如下: BufferedImage bi_src = ...; ImageIO.writ ...

  6. java协变 生产者理解_Java进阶知识点:协变与逆变

    一.背景 要搞懂Java中的协办与逆变,不得不从继承说起,如果没有继承,协变与逆变也天然不存在了. 我们知道,在Java的世界中,存在继承机制.比如MochaCoffee类是Coffee类的派生类,那 ...

  7. 如何旋转反着的PDF文件

    在很多时候,我们在工作中都会碰到PDF文件,对于PDF文件而言,很多时候都是反着的,这样的话,对于我们而言,处理起来就会变得比较麻烦了,接下来小编就告诉大家一招如何旋转反着的PDF文件吧. 1.要实现 ...

  8. java 取反 值_java编程 按位取反的问题 java中取反操作是正数

    这个问题涉及到计算机内部的编码. 对于整数,计算机内部用最高位表示符号位,0表示为正,1表示为负. 对于负数,为了便于计算,计算机用补码来表示其值. 已经一个数的补码,要知道其值分两种情况: 1:符号 ...

  9. java中取反运算符_java取反运算符

    2018-02-15 回答 用以下代码可以实现你要求的功能: long lang=64509; string str1=long.tobinarystring(lang);//将给定的数转为二进制字串 ...

最新文章

  1. html语言把字变大,css怎么让字体变大?
  2. 跟互联力量学Silverlight之十_如何完整安装Silverlight 4中文版
  3. 优化安卓应用内存的神奇方法以及背后的原理,一般人我不告诉他
  4. Acwing 1084. 数字游戏 II
  5. 天地图 android sdk,我想使用天地图sdk,第三方插件的教程走通了,现在卡住了
  6. 【es】es 的 Setting和Environment
  7. 解密 TCP/IP!
  8. 关于学校软件安装错误:“an error ocurred installing TAP device”的个人解决办法
  9. sfm支持Linux和Windows吗,VisualSFM的使用方法
  10. 批处理(bat)遍历文件夹下所有文件
  11. python星号直角三角形边长公式_三角形边长计算公式大全
  12. 随机数生成器(RNG, random number generator)
  13. 很好的万年历代码。随时可运行
  14. Python全栈开发教程笔记
  15. NP完全问题的归约-碰撞集(HITTING SET)
  16. 姓谢起名:温柔贤惠、好听到爆的谢姓女孩名字
  17. 除了啤酒与尿布 大数据又助电商玩口碑营销
  18. Python中find_elements以及presence_of_element_located的用法
  19. 用PS把真人照片转素描手绘效果
  20. 如何在微信h5拉起支付宝支付界面

热门文章

  1. linux程序内存信息pmap
  2. 酷比魔方iplay20_酷比魔方iPlay 20值得买吗 酷比魔方iPlay 20详细图文评测
  3. 从RVDS(ARM RealView Development Suite)迁移到RealView微控制器开发套件(MDK-ARM)
  4. long型输入与输出
  5. 高德地图api 地理编码(地址-->坐标)geocoder.getLocation在官方可以测试出结果,下载代码到本地却用不了 问题解决
  6. 战神引擎架设php,战神引擎免GGTools验证,免PHPStudy 通用版本搭建教程+修改默认端口+100%进游戏...
  7. Windows打开管理员权限的PowerShell的5种方式
  8. toupview软件_MTR3CMOS系列显微镜C接口制冷相机(USB3.0)
  9. java executenonquery_为什么 SqlCommand.ExecuteNonQuery() 方法返回 -1
  10. 显卡核心 短路 原因是什么?