javascript - 图像元素 'clear' 背景颜色不起作用

标签 javascript pebble-watch pebble-sdk cloudpebble

How to add an image to a window in Pebble.js? 的帮助下成功将图像添加到 Window 对象后,我尝试将图像添加到白色背景。该图像是 png,因此它是透明的,但即使设置了清晰的参数,背景也显示为黑色。有什么帮助吗?

编辑 这是代码:

// function that adds general elements to the window (top bar, icon, title, and text)
var addElementsToWindow = function(window, text) {
  // Top rectangle
  var rect = new UI.Rect({
    position: new Vector2(0, 0),
    size: new Vector2(144, 26),
    backgroundColor:'black'
  });

  // icon
  var icon = new UI.Image({
    position: new Vector2(100,20),
    size: new Vector2(25,26),
    backgroundColor: 'clear',
    borderColor: 'clear',
    image: 'images/menu_icon.png'
  });

  // Title text
  var title = new UI.Text({
    position: new Vector2(0, 30),
    size: new Vector2(144, 138),
    text:'Title',
    font:'gothic-24-bold',
    color:'black',
    textOverflow:'wrap',
    textAlign:'center',
    backgroundColor:'white'
  });

  // Loading text
  var subtext = new UI.Text({
    position: new Vector2(0, 60),
    size: new Vector2(144, 108),
    text:text,
    font:'gothic-24',
    color:'black',
    textOverflow:'wrap',
    textAlign:'center',
    backgroundColor:'white'
  });

  // Display the home screen
  window.add(rect);
  window.add(title);
  window.add(subtext);
  window.add(icon);
};

// Create the home screen
var home = new UI.Window();
addElementsToWindow(home, 'Loading...');
home.show();

最佳答案

为了使用 Pebble.js 实现透明度,需要合成属性。您将需要使用两组相同的图像。原因是 Pebble.js 使用与原生 SDK 相同的图像工具。 SDK不直接支持透明图像,因为它将所有PNG转换为1位黑白Pebble图像,丢弃透明度信息。

但是,除非绝对需要,否则我不建议使用此方法。性能损失大致相当于绘制常规图像四次。两张图像乘以二,并且启用合成使其加倍。最好制作具有人造透明度的单个图像 - 烘焙背景。

解决了这个问题,以下是您可以做到的事情。您可以制作一张图像 image_mask_white.png,其中最初的白色像素保持白色,其他所有内容均为黑色,而制作另一张图像 image_mask_black.png,其中最初的黑色像素变为白色,其他所有内容均为黑色。换句话说,您将拥有两个颜色 channel 的两个蒙版,使用白色表示不透明,使用黑色表示透明。使用这两个蒙版,您可以将它们合成在一起以形成具有透明度的单个图像。

var wind = new UI.Window();

var iconWhite = new UI.Image({
  position: new Vector2(100, 20),
  size: new Vector2(25, 26),
  compositing: 'or', // White pixels are shown, black pixels are clear.
  image: 'images/icon_mask_white.png'
});

var iconBlack = new UI.Image({
  position: new Vector2(100, 20),
  size: new Vector2(25, 26),
  compositing: 'clear', // The image’s white pixels are painted as black, and the rest are clear.
  image: 'images/icon_mask_white.png'
});

wind.add(iconWhite);
wind.add(iconBlack);

wind.show();

除了“或”和“清除”之外,还有“与”和“设置”,它们各自相反。您可以根据源图像使用其他组合创建合成图像。这只是一种可能的组合。 The official Pebble C SDK has more information on the compositing modes here.

背景颜色和边框颜色默认是透明的。正如您所注意到的,合成关闭的卵石阻碍了背景。合成应该显示背景颜色适当清晰,否则即将出现错误报告!

关于javascript - 图像元素 'clear' 背景颜色不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27002194/

相关文章:

c - 外部数组的地址在编译单元之间不同

javascript - 微软语音识别+nodejs

javascript - 用 enzyme react 测试组件 Prop 变化

javascript - 链接元素与文本、背景、显示行为

javascript - 为什么pushState() 不适用于干净的URL?

Pebble 2 HR 检测不到任何信号

javascript - 使用 Pebble.js 获取 AJAX 请求时出错

c - 文件包含如何在 Pebble 上工作?

c - 卵石 : How to create a custom animation?

pebble-watch - 在卵石上访问AppMessage数组中的字符串