问题标签 [graphics32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - 在 Graphics32 库 (Delphi) 中使用 ClearType
我在 Delphi 2009 中使用Graphics32库。是否可以使用带有 MS 的 ClearType 技术的 TBitmap32.TextOut 方法渲染字体?我知道 GR32 的内置抗锯齿 (TBitmap32.RenderText) 但整体质量和性能并不令人满意。
[ 更新 ]
我遇到了另一个问题 - 我正在使用Tondrej 链接中的函数,该链接发布在 TCustomImage32 后代类方法的评论中。该类的一个实例在 dmBlend 模式下工作,我在使用它的 Font.Color 属性时遇到问题 - 使用 TextOut 方法呈现的文本忽略了该属性(它将文本呈现为好像它具有颜色值“alpha”)。使用 RenderText 时未出现此问题。显然,绘制 TPaintBox32 组件时一切正常。
delphi - 将 24bpp 位图就地转换为 32bpp
在 Delphi 7 中,我必须处理相当大的 24bpp 位图(几个 100 MB)。由于我想使用 Graphcis32 库进行进一步处理,因此必须将它们转换为 32bpp (TBitmap32)。然而,TBitmap32 的 LoadFromFile 方法会创建一个临时的常规 TBitmap 来加载原始 24bpp 位图,然后将其分配给 TBitmap32 以进行所需的格式转换。当然,在内存中有两个这样巨大的位图,内存负载大约会增加一倍,这对我的应用程序来说可能是致命的。
我在想的是一种将 24bpp 位图加载到预先分配的缓冲区中的方法,该缓冲区的尺寸使得 32 bpp 位图适合。然后,从缓冲区端开始,我想将 RGB 字节移动到 32bpp 所需的偏移量.
这可能吗?如何将位图加载到预分配的缓冲区中?任何想法?
delphi - Delphi 6 - 仅当所有者窗口在使用 Graphics32 库时需要重新绘制时才更新位图
我有一个使用原生 Delphi 代码在 TPaintBox 画布上创建 3D 运动的应用程序。在旧代码中,我将 3D 图像渲染为 Timer 事件上的临时 TBitmap。在 TPaintBox OnPaint() 事件中,我将 BitBlt() 临时 TBitmap TPaintBox 的画布。这种方法效果很好,但动作很生涩。
因为我对运动的平滑度不满意,所以我决定尝试“渲染”到一个非常大的工作区位图,然后将其下采样到 TPaintBox 画布。为了进行重新采样,我使用了我在这里读到的 Graphics32 库:
我更改了我的代码以渲染为一个大的 TBitmap32 (1100w x 1100h),然后当我对其进行下采样时,我使用带有 TLanczosKernel 内核的 Graphics TKernelResampler 对象对另一个大小与TPaintBox Canvas 并调用 TPaintBox 的 Refresh 方法。在 TPaintBox OnPaint 事件中,我 BitBlt() 将 TBitmap32 下采样到 TPaintBox 画布。
这可行,但问题是我只在拥有 TPaintBox 的表单需要重绘时才看到重绘,尽管我在完成渲染后立即在 TPaintBox 上调用了 Refresh 方法,但旧代码没有这个问题正如我所说的那样。作为有效性测试,我在大型高分辨率 TBitmap32 对象和用于预渲染的较小 TBitmap32 对象上调用了 SaveToFile()。位图显示,在 Timer 事件之间,帧的内容确实没有改变,所以这不是一个奇怪的重绘相关问题,至少 TPaintBox 组件没有。
如果我通过移动表单或用另一个表单覆盖其客户区的任何部分来使表单的画布无效,那么 TBitmap32 对象的内容会更新,我保存到磁盘作为检查的位图图像也会更新。
就好像 Graphics32 TBitmap 对象本身需要失效,以便更新我渲染到大型高分辨率工作区的新内容。但是,TBitmap32 没有这样的无效/刷新调用。
如果那里有人对 Graphics32 库有经验并且可以告诉我为什么我只在表单需要重新绘制或它的客户区无效时才看到图像发生变化,那么我将不胜感激。
delphi - 如何在 Graphics32 中检索 RenderText 的确切文本宽度
我认为我的问题很清楚,但我解释得更多。简单地说,当我们在 RenderText 过程中使用 AntiAlias 时,TextWidth 函数中得到的值是不正确的。我该怎么做才能获得正确的文本宽度?
delphi - Delphi、GR32 + PngObject:转换为 Bitmap32 无法按预期工作
我正在使用 GR32 绘制多个半透明 PNG 图像。到目前为止,我一直在使用以下方法:
但是我想切换到 GR32 网站(http://graphics32.org/wiki/FAQ/ImageFormatRelated)上提出的方法:
虽然第一种方法工作得很好,但第二种方法 - 应该给出相同的结果 - 导致 alpha 通道出现非常奇怪的问题,请查看图像(它还显示了与 Paint.NET 中“排列”的相同图像的比较 - 背景和图标在编辑器的图层上打开)。该图像描述了 Bitmap32 加载或绘制不正确。有小费吗?
-- 11 月 22 日添加
我发现这不是关于绘图,而是关于将 PNG 加载到 BMP32。从 BMP32 保存回 PNG 会生成不正确的“白化”(左侧)PNG 图像。
delphi - 使用 Graphics32 创建剪贴蒙版
我正在使用Graphics32进行图像处理。看看它的功能,让我感到震惊的是,我还没有看到剪贴蒙版的正确实现。我确实看到这里和那里出现了“剪辑”一词,但它似乎指的是别的东西。
简而言之,我需要一层作为另一层的“窥视孔”;A 层应该投影到 B 层上,但只能在 B 层可见的地方。(我认为不再需要重新定义剪贴蒙版。)
如果它只是我想要呈现的另一层的位图,它不会那么难做 - 然后我可以使用这个技巧- 但让事情变得复杂的是,一个层的位图并不能说明很多关于图层将显示的内容;该层可以是:
- (部分)不可见(在视野之外)
- 移动/拉伸+可选重新采样
- 旋转
对其位图没有影响。
是不是真的没有现成的实现呢?自己做这件事有什么建议吗?
进步
我在 Graphics32 的源代码中发现了一些有用的元素。例如,使用此声明:
为了访问受保护的方法,我可以调用TLayerAccess(ABitmapLayer).Paint(ABitmap32)
将这一层绘制到位图上,就像在屏幕上一样。
delphi - 从 TImage32(Graphics32 库)中删除垃圾 DFM 数据
我有一个从 TImage32 派生的控件:
一切都很好,除了当我将 TChromaDisplay 放在表单上时,生成的 DFM 文件很大(300KB 而不是 <1KB),因为我在 Bitmap.Data 字段中保存了垃圾数据(它只是一个灰色图像)。每次我将控件放在表单上时,都会创建位图图像并用灰色填充。我不想将图像(垃圾)的内容保存到 DFM 文件,因为它会使 EXE 变大,但我不知道如何。
可能我需要在 TChromaDisplay.Create 的某个地方写下我的 TChromaDisplay 中没有保存/存储任何图像数据。但我不知道在哪里/如何做。
我在 Create 中尝试过,但无济于事:
delphi - 如何使用 Graphics32 环绕变换来变换多边形区域?
Graphics32 提供了一个 Image Wrapping 示例 (\Transformation\ImgWarping_Ex),用户可以在其中使用画笔来包裹 bitmap32 的一部分。然而,这个示例真的很难理解,因为它混合了许多复杂的概念。
假设我需要一个环绕变换,它将多边形区域从一种形状转换为另一种形状。我怎么能完成这样的任务?
c++builder - graphics32 是否适用于 c++ builder XE2?
我已经安装了graphics32 1.9.1 1581,编译并添加了GR32_DSGN_RSXE2包。但它没有 .h 文件,并且您的组件和组件文件夹仅在 Delphi 项目中可见。它对 C++ 的实现在 builder 6 中停止了吗?有没有办法在 cbuilder XE2 中使用它?有替代品吗?