标签: alphablending

是否可以使用alpha混合透明度创建CImageList?

如果可以创建具有alpha混合透明度的CImageList,我想知道.

创建具有丑陋透明度的CImageList的示例代码(无alpha混合)

CGdiPlusBitmapResource m_pBitmap;
m_pBitmap.Load(IDB_RIBBON_FILESMALL,_T("PNG"),AfxGetResourceHandle());

HBITMAP hBitmap;
m_pBitmap.m_pBitmap->GetHBITMAP(RGB(0,0,0),&hBitmap );

CImageList *pList=new CImageList;
CBitmap bm;
bm.Attach(hBitmap);
pList->Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 4);
pList->Add(&bm, RGB(255,0,255));
Run Code Online (Sandbox Code Playgroud)

c++ mfc image alphablending mfc-feature-pack

5
推荐指数
1
解决办法
4113
查看次数

将透明纹理与深度混合

我试图混合具有透明区域的纹理:

glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, ...);
glVertexPointer( 2, GL_FLOAT, 0, ... );
glEnable (GL_BLEND);
glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glDrawArrays( GL_TRIANGLE_STRIP, 0, 4 );
Run Code Online (Sandbox Code Playgroud)

除非我添加glDisable(GL_DEPTH_TEST),否则顶部纹理的透明部分会覆盖它们下面的所有内容(而不是混合).有没有办法在不禁用深度的情况下做到这一点?我尝试了各种混合功能但没有帮助.

textures alphablending opengl-es

5
推荐指数
1
解决办法
2231
查看次数

如何在表单上绘制透明图像?

我想在Delphi表单上绘制透明图像,但它不起作用.

这是原始的PNG:
透明边框

我已经在TImage中加载了图像::

Image1.Transparent := True;
Form1.Color := clWhite;
Form1.TransparentColor := True;
Form1.TransparentColorValue := clWhite;
Run Code Online (Sandbox Code Playgroud)

的TImage

应用程序:
应用


图像不完全透明.
图像可以通过任何控件或仅通过画布绘制.
我想使用BMP图像.
也许我做错了什么?
请帮忙!

delphi transparency alphablending delphi-7

5
推荐指数
1
解决办法
9321
查看次数

Android Bitmap Alpha Banding

我有一个径向alpha渐变的png,因此在边缘处它的黑色和中心是完全透明的,具有漂亮的平滑渐变.

当我加载我的Bitmap并将其显示在SurfaceView Canvas上时,我会得到不好的alpha条带.而不是一个漂亮的平滑渐变,alpha值似乎跳下来并导致所有相同alpha值的大带.

据我所知,带有alpha通道的位图在加载或绘制时不应转换.如何在画布上正确绘制我的png?

任何帮助将不胜感激,谢谢!= d

android alphablending bitmap

5
推荐指数
0
解决办法
357
查看次数

Alphablend和TransparentBlt

这个问题与我之前关于SO的问题有关.

我想结合两个alpha层,只应用于源层的特定部分.我试过的一种方法是将SourceConstantAlpha设置为$ ff(并让函数使用源图层中的alpha通道).

这种作品 - 尽管速度很慢(我想我可以通过使用ScanLines来加快速度),但这部分是因为我无法弄清楚将alpha通道设置为什么.文档表明计算是:

st.Red  = Src.Red   + (1 - Src.Alpha) * Dst.Red
Run Code Online (Sandbox Code Playgroud)

我通过猜测工作尝试了一些不同的值,但我的第一个问题是:我如何计算alpha值?

在阅读了其他一些SO问题之后,我遇到了TransparentBlt函数,它可以很好地屏蔽(和快速)但不透明,有没有办法将这两个调用组合在一起(可能使用第三层)?

unit MainWnd;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ControlsEx;

type
{------------------------------------------------------------------------------}
  TfrmMain = class(TForm)
    PaintBox1: TPaintBox;
    procedure PaintBox1Paint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

{..............................................................................}
procedure copyToAlpha(const in_bitmap : TBitmap; const in_transparentColor : TColor;
        const in_transparency : integer);
var
  x : …
Run Code Online (Sandbox Code Playgroud)

delphi gdi canvas alphablending ownerdrawn

5
推荐指数
1
解决办法
7457
查看次数

将两个16位RGB颜色与alpha混合相结合

我有一个TFT显示屏,可以绘制16位颜色,格式RGB 565.我想为我显示的内容添加一些透明度.

假设我有一个黑色背景(0x0000),我想画一个半透明的白色前景(0xFFFF)(不透明度由另一个字节控制),所以它会显示为灰色.如何以相同的RGB 565格式计算16位灰色,这样我就可以将它发送到我的TFT并且它会正确显示(可能有一些损失,但我不在乎)?

我需要一个功能,如:

unsigned short calcColor_RGB565(unsigned short background_RGB565, unsigned short foreground_RGB565, unsigned char opacity)
Run Code Online (Sandbox Code Playgroud)

calcColor_RGB565(0x0000, 0xFFFF, 128) 会导致0x8410(或0x1084,这并不重要,因为我向TFT发送两个单独的字节,所以如果需要我只会反转顺序)

感谢任何可以帮助我的人,我已经尝试了一些东西,但我无法得到正确的结果,甚至没有关闭:/.

类似C的伪代码赞赏,但我更喜欢解释如何做到这一点.

编辑:忘了说,我希望它尽可能快,因为它是一个旧的微处理器,所以如果分别计算2个字节更快(所以我也不必在以后将它们分开)然后我'我对这种优化非常感兴趣.

编辑9月27日:5天后,仍未解决.我可以从rgb565转换为rgb8888,进行alpha混合然后转换回rgb565,但这太慢了,必须有更好的方法!

c alphablending colors

5
推荐指数
2
解决办法
3233
查看次数

FireMonkey中的AlphaBlend

如何AlphaBlend在FireMonkey桌面应用程序中更改(表单的)值?好吧它可以在VCL应用程序中使用,但我在FireMonkey中找不到它.

截图:

在此输入图像描述

delphi alphablending firemonkey delphi-xe5

5
推荐指数
2
解决办法
4238
查看次数

opencv:用alpha蒙版混合两个图像

我试图以最有效的方式将两个图像与OpenCV混合.目前,我有这个:

// Input matrices to mix
cv::Mat A(w, h, CV_8UC3);
cv::Mat B(w, h, CV_8UC3);

// Mix factor
cv::Mat alpha(w, h, CV_8UC1);

// Have to multiply alpha channel for mul() function    
std::vector<cv::Mat> array{alpha, alpha, alpha};
cv::Mat alpha_multichannel;
cv::merge(array, alpha_multichannel);

cv::Mat result = A.mul(alpha_multichannel, 1./255) + B.mul(cv::Scalar(255, 255, 255) - alpha_multichannel, 1./255);
Run Code Online (Sandbox Code Playgroud)

目前,这在图像上至少循环四次(对于alpha_multichannel图像,对于A.mul,对于B.mul和总和),尽管使用自定义循环,它可以在一个循环中完成.

有一个更好的方法吗?

optimization performance opencv alpha alphablending

5
推荐指数
0
解决办法
2301
查看次数

将抗锯齿圆圈与 regl 混合

我正在使用 regl 渲染圆圈,并且有三个目标:

  1. 画布应该是透明的,在其后面显示 HTML 内容。
  2. 圆应该平滑地抗锯齿。
  3. 重叠的圆圈应该看起来合理(混合颜色,没有角落显示)

到目前为止,我有这个:故障代码演示

更新:演示链接现在反映了有效的、已接受的答案。下面的代码不变。

索引.js

const regl = require('regl');
const glsl = require('glslify');
const vertexShader = glsl.file('../shaders/vertex.glsl');
const fragmentShader = glsl.file('../shaders/fragment.glsl');

// Create webgl context and clear.
const canvasEl = document.querySelector('canvas');
const app = regl({
  canvas: canvasEl,
  extensions: ['OES_standard_derivatives']
});
app.clear({color: [0, 0, 0, 0], depth: 1});

// Generate random points and colors.
const attributes = {position: [], color: []};
for (let i = 0; i < 100; i++) { …
Run Code Online (Sandbox Code Playgroud)

shader blending alphablending glsl regl

5
推荐指数
2
解决办法
1049
查看次数

金属中的Alpha混合未达到预期的结果

我在Metal中渲染半透明精灵时遇到麻烦。我已经阅读了这个问题,而这个问题,而这一次,和这个线程在苹果的论坛上,还有几个,但不能完全得到它的工作,所以请标志着这个问题作为一个重复之前阅读

我的参考纹理有四行四列。这些行分别是完全饱和的红色,绿色,蓝色和黑色。列的不透明度从100%不透明到25%不透明(依次为1、0.75、0.5、0.25 alpha)。

Pixelmator(我创建它的地方)上,它看起来像这样:

在此处输入图片说明

如果在导出之前插入完全不透明的白色背景,它将看起来像这样:

在此处输入图片说明

... 但是,当我将其纹理映射到Metal中的四边形上,并在将背景清除为不透明的白色(255、255、255、255)后进行渲染时,我得到了:

在此处输入图片说明

...显然比不透明的碎片要(后面的亮白色应“渗出”)。

实施细节

我将png文件作为纹理资产导入到Xcode中,作为我应用程序资产目录中的纹理资产,并在运行时使用加载了该文件MTKTextureLoader。该.SRGB选项似乎没有什么不同。

就我所知,着色器代码没有做任何花哨的事情,但仅供参考:

#include <metal_stdlib>
using namespace metal;

struct Constants {
    float4x4 modelViewProjection;
};

struct VertexIn {
    float4 position  [[ attribute(0) ]];
    float2 texCoords [[ attribute(1) ]];
};

struct VertexOut {
    float4 position [[position]];
    float2 texCoords;
};

vertex VertexOut sprite_vertex_transform(device VertexIn *vertices [[buffer(0)]],
                                         constant Constants &uniforms [[buffer(1)]],
                                         uint vertexId [[vertex_id]]) { …
Run Code Online (Sandbox Code Playgroud)

xcode alphablending metal

5
推荐指数
1
解决办法
149
查看次数