- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在具有给定 alpha channel 的 SDL_Surface
上呈现抗锯齿字符串。
我发现可以渲染:
Blended
变体的抗锯齿字符串(即:TTR_RenderText_Blended
)。但是我不能让它透明。Shaded
方法的抗锯齿字符串。但是有一个坚实的背景。可以将背景和绘制的字符串设为透明,但纯色背景仍然存在。也不可能将透明背景色传递给它。Solid
变体使其透明化。但它没有消除锯齿。谢谢
最佳答案
我知道我在这方面有点晚了:/
根据关于 SDL_SetAlpha
的 SDL 文档:
Note that per-pixel and per-surface alpha cannot be combined; the per-pixel alpha is always used if available.
所以常规的 SDL_BlitSurface
/SDL_SetAlpha
在这里不起作用。但这是可以做到的:
我能想到的 alpha 混合 TTF_RenderText_Blended
输出的唯一方法是使用 OpenGL,或调整表面中每个像素的 alpha 值。
您可以通过将每像素 alpha 值从 [0, 255]
缩放到新范围 [0, alpha]
来实现:
// Changes a surface's alpha value, by altering per-pixel alpha if necessary.
void SetSurfaceAlpha (SDL_Surface *surface, Uint8 alpha)
{
SDL_PixelFormat* fmt = surface->format;
// If surface has no alpha channel, just set the surface alpha.
if( fmt->Amask == 0 ) {
SDL_SetAlpha( surface, SDL_SRCALPHA, alpha );
}
// Else change the alpha of each pixel.
else {
unsigned bpp = fmt->BytesPerPixel;
// Scaling factor to clamp alpha to [0, alpha].
float scale = alpha / 255.0f;
SDL_LockSurface(surface);
for (int y = 0; y < surface->h; ++y)
for (int x = 0; x < surface->w; ++x) {
// Get a pointer to the current pixel.
Uint32* pixel_ptr = (Uint32 *)(
(Uint8 *)surface->pixels
+ y * surface->pitch
+ x * bpp
);
// Get the old pixel components.
Uint8 r, g, b, a;
SDL_GetRGBA( *pixel_ptr, fmt, &r, &g, &b, &a );
// Set the pixel with the new alpha.
*pixel_ptr = SDL_MapRGBA( fmt, r, g, b, scale * a );
}
SDL_UnlockSurface(surface);
}
}
我知道它看起来很可怕,但它非常简单。关键行在这里:
*pixel_ptr = SDL_MapRGBA( fmt, r, g, b, scale * a );
你可以这样使用它:
text_surface = TTF_RenderText_Blended( font, "Hello World!", color );
SetSurfaceAlpha( text_surface, 128 );
如果使用 OpenGL,事情就容易多了。假设您将 SDL_Surface
从 TTF_RenderText_Blended
转换为 GL 纹理,您可以使用:
glColor4f( 1.0, 1.0, 1.0, Alpha );
在将其渲染到带纹理的四边形之前。
但不要忘记先启用 alpha 混合!
glEnable( GL_BLEND );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
关于c++ - SDL + SDL_ttf : Transparent blended text?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3229391/
假设我有一个类人: public class Person { public string Name {get; set;} public int Age {get; set;} }
我听说过很多关于使用 Expression Blend 制作 HTML/Javascript Metro 应用程序的信息。 但是,我很好奇 Expression Blend 在制作网站(即在所有浏览器
我知道使用混合的 DropShadowEffect,但我需要阴影出现在控件的内部,使其具有内部凹陷的外观。 任何想法将不胜感激。 最佳答案 这是一种使用带有剪切路径的投影来修剪外边缘的技术,只留下阴影
每隔一段时间,我就会在 Blend for Visual Studio 中遇到编译器异常。一切都在编译和工作得很好,然后突然 BAM!我收到编译器错误,告诉我对象不存在于特定的命名空间中。在它们消失之
每当我尝试在 Expression Blend 4 上运行项目时,总会出现错误。 指定的解决方案配置“Debug|MCD”无效。请使用配置和平台属性指定有效的解决方案配置(例如 MSBuild.exe
我似乎很擅长让 Expression Blend 4 在启动时崩溃。该问题似乎与初始化静态托管和非托管变量的死锁有关,因为 Blend 首先打开我的解决方案,其中混合了非托管 C++ 和托管代码项目。
我在混合中显示设计时数据时遇到问题,这是我的代码 这是我的收藏 View 源: 以及使用它的网格 View : 您无法通过在设计器中单击来选择实际的“屏幕”。即使您没有添加其他元素。如果添加任何元素,您将获得预期的典型调整大小行为,但由于您无法选择屏幕,因此您无法调整其大小,甚至无法查看属性。 最佳答案 您可以
我注意到当使用 mix-blend-mode 时,结果与使用 background-blend-mode 时不同,即使你使用相同的混合模式。 例如,比较以下 2 个结果: 我已经在下面复制了我的设置和
我们的版本适用于 Silverlight 5 的 Microsoft Expression Blend 预览 已于 6 月 30 日到期,还有 否 提供在线许可证购买选项。 以下链接指出 Blend
由于SketchFlow中没有网格 Assets ,因此最好的表示方式是什么?每个人都只是使用矩形 Assets 吗? 最佳答案 在提出问题时,存在变通方法和弊端。但是现在-随着刚刚发行的(2010年
我浏览到我想要打开的解决方案中的单个项目,而表达式混合会打开整个解决方案。有什么办法可以避免这种情况? 最佳答案 Expression Blend 和 Visual Studio 共享相同的 .sln
我刚刚开始使用 Blend for Visual Studio 来习惯 WPF。我以前使用标准的 Windows 窗体创建程序,现在想使用更现代的东西。但是我在 5 分钟后就遇到了一个主要问题。我添加
我正在尝试在 Blend 3 中设计一些 UserControl 类。我希望它们的某些部分在运行时创建时“折叠”,但我希望能够编辑它们的组成部分而无需每次都修改代码 build 。 它适用于示例数据源
我正在为我的 Silverlight 2 应用程序构建自定义控件。它在一个 SL 类项目中,它包含两个文件: MyControl 类,继承自 Control,很少有 DepedencyProperti
我想删除绿屏背景,但对我所取得的成就并不完全满意,因为我仍然有绿色边框(尤其是在头发等半透明区域,当我移动头部时)。 色键过滤器的混合参数文档说 blend Blend percentage. 0.0
我开始使用 Blend for VS 2012RC,当我打开 Blend 然后转到 New Project ,我看不到选择项目类型的选项。它完全是空的,如下所示。谁能帮我解决这个问题。 我还尝试在 V
我正在尝试添加对另一个项目(例如 Elysium)中定义的资源库的引用,并在表达式混合中使用它。 这是我在 App.Xaml 文件中合并资源字典的方法。
我试图在加载屏幕时激活一个状态,但它不起作用。 我要做的是,我转到屏幕,右键单击 LayoutRoot,然后转到“激活状态”,然后选择我的状态。然后当我点击这个新生成的 [ActivateStateA
我使用 Blend 创建了 TextBox 模板的副本。我需要在 ValidationErrorElement 中编辑 Path.Data。我怎么做?我可以看到 XAML,但我无法弄清楚如何使用设计器
我是一名优秀的程序员,十分优秀!