我创build的应该是一个非常简单的Win32 C ++应用程序,仅用于显示半透明的PNG。 该窗口不应该有任何铬,所有的不透明度应该在PNG本身进行控制。 我的问题是,当窗口下的内容改变时,窗口不会重新绘制,所以当应用程序最初启动时,PNG的透明区域与“窗口”下的内容“卡住”。 这里是我设置新窗口的那一行: hWnd = CreateWindowEx(WS_EX_TOPMOST, szWindowClass, szTitle, WS_POPUP, 0, height/2 – 20, 40, 102, NULL, NULL, hInstance, 0); 对于RegisterClassEx的调用,我有这样的背景设置: wcex.hbrBackground = (HBRUSH)0; 这是我的WM_PAINT消息处理程序: case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); Gdiplus::Graphics graphics(hdc); graphics.DrawImage(*m_pBitmap, 0, 0); EndPaint(hWnd, &ps); break; } 有一件事要注意的是,应用程序总是停靠在屏幕的左侧,不移动。 但是,当用户打开,closures或移动窗口时,应用程序下面的内容可能会改变。 应用程序首次启动时,看起来很完美。 透明(和simi透明)的PNG部分显示完美。 但是,当应用程序下面的背景发生变化时,背景不会更新,只是应用程序首次启动时保持不变。 实际上,WM_PAINT(或WM_ERASEBKGND在后台更改时不会被调用)。 我已经玩了很长一段时间,已经接近100%的权利,但不是那样。 例如,我试图设置背景(HBRUSH)NULL_BRUSH,我试着处理WM_ERASEBKGND。 当它下面的内容改变时,可以做些什么来重新绘制窗口?
是否可以在Three.js的同一个面上放置多个纹理,以便在GPU中加速GPU? 纹理是(或应该)应用到同一个面,以便底部纹理(纹理1)没有alpha通道,上面的纹理是像下面的图像示例中纹理2的方式alpha通道。 这种混合可以使用HTML5 Canvas作为预备步骤来实现,但是由于纹理位图可能很大,我倾向于跳过Canvas混合操作。 我testing了创build一个网格的副本,并应用每个网格一个纹理,并使其他网格透明,并移动了一点,这几乎成功,但有一些闪烁,因为对象不能完全在相同的位置,有一些纹理之间的空间不是正确的效果。 他们应该看起来像他们混合在例如。 Photoshop(如下图)。
我正在写一个颜色select器,可以从屏幕上的任何位置获取像素RGB值。 我想也可以select指定我select的颜色已经有一个alpha值。 我只是想知道如何计算结果颜色。 例如: 由此产生的像素颜色是240,247,249,但我知道原来的颜色有10%的不透明度,并在白色(255,255,255)的背景上。 计算原始RGB值的计算是什么?
我试图混合背景与前景图像,其中前景图像是一个透明的图像与线条。 我正在试图这样做。 UIGraphicsBeginImageContext(CGSizeMake(320, 480)); CGContextRef context = UIGraphicsGetCurrentContext(); // create rect that fills screen CGRect bounds = CGRectMake( 0,0, 320, 480); // This is my bkgnd image CGContextDrawImage(context, bounds, [UIImage imageNamed:@"bkgnd.jpg"].CGImage); CGContextSetBlendMode(context, kCGBlendModeSourceIn); // This is my image to blend in CGContextDrawImage(context, bounds, [UIImage imageNamed:@"over.png"].CGImage); UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); UIImageWriteToSavedPhotosAlbum(outputImage, self, nil, nil); // clean […]