将两个图像(字节数组格式)合并为具有alpha的单个图像

时间:2015-07-30 16:14:55

标签: android image-processing bytearray alphablending

如何使用alpha蒙版将两个字节数组图像合并到图像中。我想使用字节操作在alpha上添加一个图像。

如何为字节数组图像实现此目的?

2 个答案:

答案 0 :(得分:1)

考虑到您使用的是真彩色格式(此处为32位 - ARGB),您可以采取以下措施。添加伪代码,以便它对任何语言都有用(实际上有点懒在Java中编写;))。

procedure TForm1.BrowserDocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);
var
  I: Integer;
  Document: IHTMLDocument2;
  Tags: IHTMLElementCollection;
  Element: IHTMLElement;
begin
  if ASender is TWebBrowser then
  begin
    Document := TWebBrowser(ASender).Document as IHTMLDocument2;
    if Assigned(Document) then
    begin    
      ... //Here Document.body.innerHtml is empty
    end;
  end;
end;

为了优化,

  1. 可以完全忽略为composedImage创建内存并覆盖任何一个输入图像(如果它适合你的情况)。

  2. 预先计算常用操作例:(1-image2 [i] .a)

  3. 如果您在许多地方混合第二张图像,那么使用预乘颜色值会更有意义并避免乘法运算。
  4. 上面应该让你潜入水中! ^ _ ^

答案 1 :(得分:0)

我有这个代码。您需要将图像转换为可绘制格式,但这很容易。

只需传入资源对象和2个drawable。

public static Bitmap GetOverlayedImage(Resources res, Drawable img1, Drawable img2) {
    float den = res.getDisplayMetrics().density;
    int dip = (int) (80 * den + 0.5f);
    int sz = (int) (128 * den + 0.5f);

    Drawable[] layers = new Drawable[2];
    layers[0] = img1;
    layers[1] = img2;

    LayerDrawable layerDrawable = new LayerDrawable(layers);
    layerDrawable.setLayerInset(1, dip, dip, 0, 00);

    Bitmap b = Bitmap.createBitmap(sz, sz, Bitmap.Config.ARGB_8888);
    layerDrawable.setBounds(0, 0, sz, sz);
    layerDrawable.draw(new Canvas(b));

    return b;
}