我正在寻找一个转换它们的公式.
我知道转换一般的透明度
alpha*new +(1 - alpha)*old
我有:
Color A : RGB( 85, 113, 135 )
Color B : RGB( 43, 169, 225 )
Run Code Online (Sandbox Code Playgroud)
颜色A具有90%的不透明度,并且位于颜色B的顶部,从而产生
Color C : RGB( 65, 119, 145 )
Run Code Online (Sandbox Code Playgroud)
我的问题是,它如何获得Color C?如果我将Color B替换为另一件事,我该如何获得Color C?
这是另一个例子,相同的基色:
Color A : RGB( 85, 113, 135 )
Color B : RGB( 45, 67, 82 )
--------
Color C : RGB( 65, 109, 131 )
Run Code Online (Sandbox Code Playgroud)
这些是用图像完成的工作示例 - 我现在正在尝试计算剩余的颜色C,以便我可以指定背景颜色.
更新,请参阅接受的答案.在red上面的例子很奇怪-接受的答案对所有的颜色正确的公式,我在Photoshop中进行了测试.
android是否支持任何本机支持的视频格式的alpha通道,或者是否有人知道它是否在管道中?
可能在3.0中的android中的h.264?
我需要将webm编码的视频分割png成帧,而不会失去透明度。我使用以下 ffmpeg 命令:
ffmpeg -i dancer1.webm -pix_fmt rgba frames/%04d.png
Run Code Online (Sandbox Code Playgroud)
这会生成一个 png 目录,但为什么每个输出帧都缺少透明度?
我使用了这个示例视频,其中包含一个 alpha 通道。看它在这里播放背景。这是来自 ffmpeg 的示例输出帧:

ffmpeg 在运行时产生以下输出:
ffmpeg version N-60294-g549f052 Copyright (c) 2000-2014 the FFmpeg developers [1/2471]
built on Feb 2 2014 05:41:56 with gcc 4.6 (Debian 4.6.3-1)
configuration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-I/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-L/root/ffmpeg-static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
libavutil …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用透明模式推送视图控制器。
这是我的代码:
SearchViewController * searchViewController= [self.storyboard instantiateViewControllerWithIdentifier:@"SearchViewController"];
searchViewController.view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.7f];
[self.navigationController pushViewController:searchViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
我做错的事情找出来并帮助我解决这个问题。
alpha-transparency uinavigationcontroller pushviewcontroller ios
考虑以下小SVG显示两个相邻的三角形:
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" version="1.1">
<polygon points="10,0 60,0 35,50" style="fill:#cc4444;"/>
<polygon points="35,50 85,50 60,0" style="fill:#cc3333;"/>
</svg>
Run Code Online (Sandbox Code Playgroud)
这在我的浏览器中呈现如下

注意多边形之间的白线.虽然我理解使用混合是原因,但是当您尝试渲染例如此处所示的数学表面时,此行为非常烦人.
SVG中解决这些差距的正确解决方案是什么?一种方法是将多边形设置为stroke具有相同颜色的小多边形,但这看起来更像是对我的破解,并且在具有大量多边形的图形中,它显着增加了文件大小.
我试图在已经存在的图像的顶部绘制组合形状的透明蒙版.我通过本文中包含的对话框代码提供了我正在尝试的技术示例.这是它产生的截图.
示例1(左上角)突出显示我想要解决的问题,我希望有2个圆圈或任何相交的形状/弧线,所有绘制都与相同的alpha级别一起绘制,即没有因绘制顶部而导致的复合不透明度彼此.
示例3(左下角)是我尝试通过创建一个单独的图像和固体形状来解决问题,然后使整个图像透明,我认为使用这种技术会产生一个图像,其中白色被视为透明颜色,所以圆的边缘与白色混合,这样当你在它上面绘制时会在形状周围产生"光晕"效果.
示例2(左上角)通过将图像中的圆圈绘制为透明来进一步突出显示此问题,因此您可以看到由突出显示引起的更粉红色.
我的问题是,如果不了解背景颜色,并且没有关闭抗锯齿,我怎样才能达到我想要的效果?有没有办法,因为我所有的研究都是空白的?也许我需要使用不同的图像绘制解决方案并返回SWT?我知道如果直接从文件加载它能够绘制透明图像,所以我知道它可以保存这种数据,但我该如何创建它?
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class FMLDialog extends Dialog
{
private Color red;
private Color blue;
public FMLDialog(Shell parentShell)
{
super(parentShell);
}
@Override
protected void configureShell(Shell shell)
{
red = new Color(shell.getDisplay(), new RGB(255,0,0));
blue = new Color(shell.getDisplay(), new RGB(0,100,255));
super.configureShell(shell);
shell.setSize(new Point(450,550));
shell.setText("FML");
} …Run Code Online (Sandbox Code Playgroud) 我的任务是:
我怎样才能在Delphi XE中做到这一点?
var
Png: TPngImage;
X, Y: Integer;
Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create();
Bitmap.PixelFormat := pf32bit;
Png := TPngImage.Create();
try
Bitmap.SetSize(100, 100);
// How to clear background in transparent color correctly?
// I tried to use this, but the image in PNG file has solid white background:
for Y := 0 to Bitmap.Height - 1 do
for X := 0 to Bitmap.Width - 1 do …Run Code Online (Sandbox Code Playgroud) 我目前正在通过发送鼠标和击键命令使用 python 控制游戏。我想要做的是在游戏上方放置一个透明的 Tkinter 窗口,以提供一些信息,例如鼠标位置和像素颜色。
我熟悉更改窗口的 alpha 属性以使其透明,但不知道如何始终将该窗口保持在前面并使鼠标单击穿过它。
我目前控制游戏的方法包括在某些位置截取屏幕截图并分析颜色内容。我还需要某种方法来做到这一点,而不会受到 Tkinter 窗口的干扰。
pyscreenshot用于截图 win32api用于点击
谢谢你,亚历克
我正在处理位图图像,其透明部分为洋红色(在某些语言中可以将颜色设置为透明)。我尝试将原始位图图像中洋红色的像素透明。
我从 SD 卡加载位图:
Bitmap bitmap = BitmapFactory.decodeFile(myImagePath);
Run Code Online (Sandbox Code Playgroud)
将其复制到另一个位图以使其可变:
Bitmap bitmap2 = bitmap.copy(Bitmap.Config.ARGB_8888,true);
Run Code Online (Sandbox Code Playgroud)
然后逐像素扫描以找到洋红色像素并尝试更改其透明度。
for(int x=0;x<bitmap2.getWidth();x++){
for(int y=0;y<bitmap2.getHeight();y++){
if(bitmap2.getPixel(x, y)==Color.rgb(0xff, 0x00, 0xff))
{
int alpha = 0x00;
bitmap2.setPixel(x, y , Color.argb(alpha,0xff,0xff,0xff)); // changing the transparency of pixel(x,y)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我希望变得透明的那些像素被转换为黑色。通过更改 alpha,我发现最终颜色从提到的颜色argb()(不提及 alpha)变为黑色。例如,Color.argb(0xff,0xff,0xff,0xff)变白、Color.argb(0x80,0xff,0xff,0xff)变灰、Color.argb(0x00,0xff,0xff,0xff)变黑。
我不明白出了什么问题。
有没有可能没有 alpha 通道,我应该首先设置/定义它?如果是,怎么办?
编辑1:
根据 Der Gol...lum 的评论我修改了我的代码:
Paint mPaint = new Paint();
mPaint.setAlpha(0);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
mPaint.setAntiAlias(true);
Bitmap bitmap = BitmapFactory.decodeFile(myBackImagePath).copy(Bitmap.Config.ARGB_8888 , true);
Canvas canvas = new Canvas(bitmap); …Run Code Online (Sandbox Code Playgroud) 关于如何通过 alpha 通道获得带有 webm 视频的透明背景,这里有一个人说你应该用 VP8 而不是 VP9 进行编码。
还有一个人说这是相反的事情,就像它应该是 VP9 而不是 VP8。
透明的 webm 视频在 Android 9.0 上的 Android 68 版 Chrome 上显示纯色背景
有没有办法让每个设备正确显示包含 alpha 通道的 webm 文件?
EDIT1:这里有一些测试结果!我制作了同一个 webm 文件的两个版本,一个使用 VP8 编码,另一个使用 VP9 编码。我已经运行测试以在不同的设备上查看它们。在 SONY 手机 (android/chrome 74) 上,使用 VP8 编码的手机以透明背景正确显示,而使用 VP9 编码的手机的背景填充为纯黑色而不是透明。在华为手机(android/chrome 74)上正好相反!带有 VP9 的显示正确,而带有 VP8 的背景填充为纯黑色而不是透明。在华硕平板电脑上,VP8 和 VP9 都能正确显示。在小米手机上,VP8 和 VP9 都无法正确显示。
EDIT2:这是一个我不完全理解的页面,其中有一些很好的解释, https://sites.google.com/a/webmproject.org/wiki/alpha-channel 我确定这完全是为了正确设置这些参数使其适用于所有 android 设备。喜欢足球/足球运动员的视频
https://simpl.info/videoalpha/
...在我的桌面 (chorme/windows)、我的平板电脑 (chrome/android) 和我的 SONY 手机 (chrome/android) 上,舞者和足球运动员的视频都通过 alpha 通道以透明背景正确显示(即是期待)。但是在华为和小米手机上,只有足球/足球运动员视频按预期工作,而奇怪的是,舞者的背景充满了纯灰色。该足球运动员的视频如何在所有安卓设备上播放;我希望我的 webm 文件也能做到这一点,但不知道如何实现。