窗口界面代码如下:

public class ImageOpsTest extends Application {@Overridepublic void start(Stage primaryStage) {// 创建Image和ImageView对象Image image = new Image("/2.PNG");ImageView imageView = new ImageView();//改变图片透明度WritableImage wImage = new ImageUtil().imgOpacity(image, 0.05);// 在屏幕上显示图像imageView.setImage(wImage);StackPane root = new StackPane();root.getChildren().add(imageView);Scene scene = new Scene(root);//stage和scene透明设置primaryStage.initStyle(StageStyle.TRANSPARENT);scene.setFill(Paint.valueOf("#ffffff00"));primaryStage.setTitle("My Test");primaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args) {launch(args);}
}

设置图片透明度代码:(你可能会想尝试修改每个像素的颜色或者透明度并将其写到屏幕上。但是要注意Image对象是只读的,要写入新的数据,你需要一个WritableImage对象来替代之)

public class ImageUtil {public static Image backGroundImg;/*** @Description javafx中图片透明度设置。先得到原图的每一个像素点信息,再赋值给新的图片对        象,再创建新图对象时,透明度可设置<br>*              经测试大图片这样做很慢,因此这里开了三个线程同时渲染* @param image 需要 改变透明度的图片对象* @param opacity 透明度,介于0-1之间* @return 新的可写的image对象* @author LIu Mingyao*/public WritableImage imgOpacity(Image image, double opacity) {// 获取PixelReaderPixelReader pixelReader = image.getPixelReader();// 创建WritableImageWritableImage wImage = new WritableImage((int) image.getWidth(), (int) image.getHeight());PixelWriter pixelWriter = wImage.getPixelWriter();// 单线程更改透明度,得到每个坐标像素点的color,并重新设值,赋予透明度,最后将新color设给新的image对象(wImage的pixelWriter)for (int readY = 0; readY < image.getHeight(); readY++) {for (int readX = 0; readX < image.getWidth(); readX++) {Color color = pixelReader.getColor(readX, readY);System.out.println("\nPixel color at coordinates (" + readX + "," +             readY + ") "+ color.toString());System.out.println("R = " + color.getRed());System.out.println("G = " + color.getGreen());System.out.println("B = " + color.getBlue());System.out.println("Opacity = " + color.getOpacity());System.out.println("Saturation = " + color.getSaturation());// 现在写入一个更为明亮的颜色到PixelWriter中// color = color.brighter();// 更暗// color.darker();// 最后一个参数是透明设置。需要设置透明不能改变原来的,只能重新创建对象赋值,Color c1 = new Color(color.getRed(), color.getGreen(), color.getBlue(), opacity);pixelWriter.setColor(readX, readY, c1.brighter());}}return wImage;}
}

上面代码经过测试大图片写入会比较慢,因此开线程来同时写入(由于国内javafx资料较少,并且本人也是学习阶段,没有找到其他方法改变透明度,可能这种方法比较笨。),开线程改变图片信息的代码如下:

package application.utils;import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;import javafx.scene.image.Image;
import javafx.scene.image.PixelReader;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;
import javafx.scene.paint.Color;/*** @Description 图片处理* @author LIu Mingyao* @date 2019年4月7日下午1:10:30*/
public class ImageUtil {public static Image backGroundImg;/*** @Description javafx中图片透明度设置。*          * @param image 需要 改变透明度的图片对象* @param opacity 透明度,介于0-1之间* @return 新的可写的image对象* @author LIu Mingyao*/public WritableImage imgOpacity(Image image, double opacity) {if (opacity < 0 || opacity > 1) throw new MarsException("透明度需要介于0-1之间,请重新设置透明度!");// 获取PixelReaderPixelReader pixelReader = image.getPixelReader();// 创建WritableImageWritableImage wImage = new WritableImage((int) image.getWidth(), (int) image.getHeight());PixelWriter pixelWriter = wImage.getPixelWriter();double imgHeight = image.getHeight();double tempHeight = imgHeight % 3;// 将原来的单个线程改变透明度(下面注释的代码)改为了三个线程,解决了大图片更改透明度缓慢的问题FutureTask<Boolean> futureTask1 = new FutureTask<Boolean>(() -> {for (int readY = 0; readY < tempHeight; readY++) {for (int readX = 0; readX < image.getWidth(); readX++) {Color color = pixelReader.getColor(readX, readY);// 最后一个参数是透明设置。需要设置透明不能改变原来的,只能重新创建对象赋值,Color c1 = new Color(color.getRed(), color.getGreen(), color.getBlue(),opacity);pixelWriter.setColor(readX, readY, c1.brighter());}}return true;});new Thread(futureTask1, "第一个透明度渲染线程").start();FutureTask<Boolean> futureTask2 = new FutureTask<Boolean>(() -> {for (int readY = (int) tempHeight; readY < 2 * tempHeight; readY++) {for (int readX = 0; readX < image.getWidth(); readX++) {Color color = pixelReader.getColor(readX, readY);Color c1 = new Color(color.getRed(), color.getGreen(), color.getBlue(),opacity);pixelWriter.setColor(readX, readY, c1.brighter());}}return true;});new Thread(futureTask2, "第二个透明度渲染线程").start();FutureTask<Boolean> futureTask3 = new FutureTask<Boolean>(() -> {for (int readY = (int) (2 * tempHeight); readY < imgHeight; readY++) {for (int readX = 0; readX < image.getWidth(); readX++) {Color color = pixelReader.getColor(readX, readY);Color c1 = new Color(color.getRed(), color.getGreen(), color.getBlue(),opacity);pixelWriter.setColor(readX, readY, c1.brighter());}}return true;});new Thread(futureTask3, "第三个透明度渲染线程").start();
//       // 单线程更改透明度,得到每个坐标像素点的color,并重新设值,赋予透明度,最后将新color设给新的image对象(wImage的pixelWriter)
//       for (int readY = 0; readY < image.getHeight(); readY++) {
//       for (int readX = 0; readX < image.getWidth(); readX++) {
//       Color color = pixelReader.getColor(readX, readY);
//       System.out.println("\nPixel color at coordinates (" + readX + "," + readY + ") "
//       + color.toString());
//       System.out.println("R = " + color.getRed());
//       System.out.println("G = " + color.getGreen());
//       System.out.println("B = " + color.getBlue());
//       System.out.println("Opacity = " + color.getOpacity());
//       System.out.println("Saturation = " + color.getSaturation());
//
//       // 现在写入一个更为明亮的颜色到PixelWriter中
//       // color = color.brighter();
//
//       // 更暗
//       // color.darker();
//
//       // 最后一个参数是透明设置。需要设置透明不能改变原来的,只能重新创建对象赋值,
//       Color c1 = new Color(color.getRed(), color.getGreen(), color.getBlue(), opacity);
//
//       pixelWriter.setColor(readX, readY, c1.brighter());
//       }
//       }//这部分代码可以自主选用。用了可以保证全部图片全部刷新完再展示,不然图片是先渲染上部分,再是中下部分
//      try {
//          // 等待三个线程全部执行完毕
//          if (futureTask1.get() && futureTask2.get() && futureTask3.get()) {
//              backGroundImg = wImage;
//          }
//      } catch (InterruptedException | ExecutionException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      }return wImage;}
}

想要改变图片其他信息同理,只是选用的Color的构造器不同。官方api:官方Color api

javafx设置图片透明度(饱和度,亮度同理)相关推荐

  1. OpenCV这么简单为啥不学——1.10、addWeighted设置图片透明度

    OpenCV这么简单为啥不学--1.10.addWeighted设置图片透明度 目录 OpenCV这么简单为啥不学--1.10.addWeighted设置图片透明度 前言 cv2.addWeighte ...

  2. python设置图片透明度_学习python第40天

    今天是在尚学堂学习python第40天今天学习了CSS 中常用样式总结,边框的风格,css中的定位,盒模型,css3中的选择器,css3中常用的属性 CSS 中常用样式总结 字体:(font) 字体的 ...

  3. indesign文字怎么绕排图片形状_indesign透明度怎么调整?indesign怎么设置图片透明度?...

    indesign透明度调整教程: 1.打开Adobe InDesign. 2.通过从工作区顶部的"控制"面板中选择"文件">"打开", ...

  4. php设置图片透明度,wps中设置图片透明度在哪里?

    方法:1.打开WPS,插入图片:2.点击"开始"中的"形状",选择与图片相同的矩形,盖住原图:3.双击图片,把"线条"的"颜色&q ...

  5. PPT2010设置图片透明度

    在做一份项目的PPT,需要插入一副图到另一幅图上作说明,可以插入后却把下面的图覆盖了,需要设置上层图片底色部分为透明才可以,查了后可用如下方法实现: 1. 这是原来的情况: 2. 鼠标右键点击图,然后 ...

  6. android设置图片 透明度渐变效果,android 自定义属性实现 ImageView 透明度渐变效果...

    先看效果图: 第一步: 在valuses下面自定义目录: 第二步: 自定义ImageView package com.jiaruihuademo.myattrimageview; import jav ...

  7. css 背景效果_css透明度怎么设置?三种css图片透明度的设置方法

    css透明度的设置在网页的设计中是经常需要用到的,有时为了设计出的网页更加的美观,会对图片进行透明化处理,这样网页上面的内容就不会看不见,有的网页因为图片作为背景,也会更加美观,那么,css中的透明度 ...

  8. 瑞芯微RK1126平台 通过http接口设置 ISP 饱和度 亮度 对比度

    通过HTTP的方式设置相机的亮度 饱和度 对比度 本来是想通过直接rk的提供的uapi那些接口直接设置isp的 但是 尝试在程序中直接调用 rkaiq那些功能程序会直接挂掉 后来 就看了下 自带的程序 ...

  9. html如何调图片透明度,css图片怎么设置透明度?

    css透明度的设置在网页的设计中是经常需要用到的,有时为了设计出的网页更加的美观,会对图片进行透明化处理,css中的透明度怎么设置呢?今天这篇文章就来给大家分享css中图片透明度的设置方法. 我们来看 ...

  10. Python 技术篇-用PIL库修改图片透明度实例演示,改变png图片色道为RGBA、RGB

    PIL 库可以设置图片透明度. pip install pillow 安装了 pillow 库后就可以使用 PIL 库了. 我们都知道,图片是由无数个点组成的,300x300 像素,就是 9 万个点. ...

最新文章

  1. 响应式 媒体查询 盒模型
  2. Spring源码分析前篇
  3. 如何在 SAP UI5 应用中集成第三方库 :一个在移动设备上查看 Web 应用打印调试信息的小技巧
  4. iview table 自定义列_基于VueJS的render渲染函数打造一款非常强大的IView 的Table组件...
  5. ICCV 2021 LVIS Challenge 长尾分布实例分割挑战赛,冠军解决方案
  6. es ik分词插件安装
  7. java中 IndexOf()、lastIndexOf()、substring()的用法
  8. window.showModalDialog用法
  9. SQLyog使用教程
  10. 如何清除手机拍照的图片 exif 防止泄露你的隐私
  11. 杭州电信域名解析服务器,国内电信域名解析服务器dns分布表.docx
  12. 【vue/iview】将所选择的文本插入文本框的光标处
  13. vue error The code generator has deoptimised the styling exceeds the max of 100KB
  14. ArrayList源码深度解析以及快速失败和安全失败机制详解【一万字】
  15. Vue SEO 优化 使用 Vapper SSR 服务器渲染框架 搭建项目 新手教程
  16. ca加密是什么情况_让我们进行加密:为什么要创建一个免费,自动化和开放的CA?...
  17. 树莓派 python 蜂鸣器_红外感应模块+蜂鸣器实现简易报警
  18. SQL Server从入门到精通(四)
  19. C51单片机LED显示二进制【核心代码详解】
  20. 变频器LED显示灯闪烁_西门子S71200 PLC通过PROFINET,控制G120变频器的启停和输出频率...

热门文章

  1. c++中MFC消息机制,UI线程和工作线程,模式对话框原理
  2. 硬件之家|钽电容的详细介绍与电路应用
  3. js判断上传文件为图片格式、excel格式
  4. word自带公式编辑_如何在word中调整公式大小
  5. Mac 锁屏防止断网、睡眠、注销登录
  6. 4种方法解决鼠标反应慢(迟钝)
  7. 关于计算机作文的结束语,语文老师:万能作文开头30篇结尾50篇,吃透次次“满分范文”...
  8. 解决ubuntu 18.04平台上thinkpad小红点TrackPoint左键随机失效的问题(by quqi99)
  9. 谷歌浏览器如何自动运行flash
  10. Sql Server 随机抽样方法