当前位置: 首页 > 面试题库 >

在Java中将32bpp图像转换为16bpp图像

於英朗
2023-03-14
问题内容

使用Java的库如何将32bpp图像(ARGB)转换为16bpp图像(ARGB)?出于好奇,在像素级别上,此转换有什么作用?如果我有一个int值保存一个像素值(具有所有通道),那么在发生转换后,该int会有什么不同?


问题答案:

将32位AARRGGBB值转换为16位ARGB值将是这样的:

int argb = ((aarrggbb & 0x000000F0) >> 4)
         | ((aarrggbb & 0x0000F000) >> 8)
         | ((aarrggbb & 0x00F00000) >> 12)
         | ((aarrggbb & 0xF0000000) >> 16);

它会将所有内容粘贴在低16位中,而将高16位保留为0。

对于每个通道,您会丢失颜色信息的低4位,而高4位则更为重要。颜色将被量化为最接近的4位等效值,从而导致整个图像出现视觉上不愉快的色带效果。

顺便提及,16位颜色通常不包含alpha分量。通常(尽管并非总是如此),它分解为红色的5位,绿色的6位(因为我们的眼睛对绿色/蓝色最敏感)和蓝色的5位。

此转换将丢失每个通道上的2或3位信息,而不是4位,并且将假定源像素不包含alpha。



 类似资料:
  • 问题内容: 如何将图像的白色背景转换为透明背景?谁能给我打电话怎么做? 问题答案: Google的第一个结果是: 使颜色透明 http://www.rgagnon.com/javadetails/java-0265.html 它使图像的蓝色部分透明,但是我敢肯定您可以对其进行调整以使用白色 (提示:传递给函数,而不是)

  • 问题内容: 在StackOverflow上已经存在类似此链接的问题,并且可接受的答案是“广播”: 在我的程序中,我尝试: 不幸的是,我得到运行时错误: sun.awt.image.ToolkitImage无法转换为java.awt.image.BufferedImage 显然,投射不起作用。 问题是:将Image转换为BufferedImage的正确方法是(或存在)什么? 问题答案: 从Java游

  • 这是logcat 08-12 08:52:32.887:D/DalvikVM(774):GC_CONCURRENT释放71K,7%释放2765K/2964K,暂停23ms+15ms,总计94ms 08-12 08:52:33.497:D/gralloc_goldfish(774):检测到没有GPU仿真的仿真器。 08-12 08:52:40.698:D/DalvikVM(774):GC_CONCU

  • 问题内容: 我有一个Image对象,我想将其转换为Icon或ImageIcon以添加到JTextPane。我将如何去做呢?(这是在JAVA中) 澄清:我的“图像”是图像对象的实例,而不是文件。 问题答案: 这有什么错?

  • 问题内容: 这是一个有趣的话题。基本上,我有一个包含一些文本的图像。如何从图像中提取文本? 我已经尝试了很多事情,但是我所做的一切都很繁琐,通常无法正常工作。我只是想知道是否有一个相当简单的方法来做到这一点。 我遇到了这个问题:http : //sourceforge.net/projects/javaocr/。我已经尝试了好几个小时,但是我无法将其从图像中转换为文本。 谢谢大家! 问题答案: 您

  • 问题内容: 我有一个要求用户将其图像上传到哪里,我必须将其转换为某种内容并将其发送到.Net REStful服务。我是angular js的新手。有人可以帮忙吗 问题答案: 我建议您使用 https://github.com/ninjatronic/angular- base64 。 在按照说明使用该库之后,您可以简单地调用: 不要忘记在模块中注入: