将BufferedImage转换为字节数组并添加alpha

时间:2019-02-26 00:16:16

标签: java graphics2d

我正在使用以下内容向视频添加叠加层;但是效果不佳,因为它需要处理每个像素(如果您以50帧/秒的速度进行全高清,这是很多工作!)

private static byte[] convert(BufferedImage image, int opacity)
{
    int imgWidth  = image.getWidth();
    int imgHeight = image.getHeight();

    byte[] buffer = new byte[imgWidth * imgHeight * 4]

    int imgLoc = 0;

    for(int y=0; y < imgHeight; y++)
    {
        for(int x=0; x  < imgWidth; x++)
        {
            int argb = image.getRGB(x, y);

            imgBuffer[(imgLoc*4)+0] = (byte)((argb>>0)&0x0FF);
            imgBuffer[(imgLoc*4)+1] = (byte)((argb>>8)&0x0FF);
            imgBuffer[(imgLoc*4)+2] = (byte)((argb>>16)&0x0FF);

            int alpha = ((argb>>24)&0x0FF);
            if (opacity < 100)
                alpha = (alpha*opacity)/100;

            imgBuffer[(imgLoc*4)+3] = (byte)alpha;

            imgLoc++;
        }
    }

如何重新编写此代码以提高性能?我已经尝试了许多不同的方法,例如:

  • image.getRGB(0,0,image.getWidth(),image.getHeight(),null,0,image.getWidth());
  • (((DataBufferByte)image.getData()。getDataBuffer())。getData()

但是这些似乎都不起作用。叠加层不会显示,而较慢的方法至少会显示叠加层。

PS:我知道上面的函数将ARGB转换为ABGR;稍后再解决。叠加层仍应显示,尽管颜色不同

0 个答案:

没有答案