Я использую следующее, чтобы добавить оверлей к видео;но он не работает должным образом, потому что требует обработки всех пикселей (что ОЧЕНЬ много работы, если у вас есть full-HD со скоростью 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 в функции выше;Я исправлю это позже.Наложение должно отображаться, хотя и в других цветах