问题标签 [gdi]

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.

0 投票
4 回答
3205 浏览

winapi - Win32 BitBlt -- 水平镜像

所以我读到 StretchBlt 可以通过否定 nWidthSrc/Dest 和 nHeightSrc/Dest 参数来水平和/或垂直镜像图像。我希望这个功能没有 StretchBlt 的性能开销。我用 BitBlt 尝试了同样的技术,但没有奏效。

有没有办法用像 BitBlt 这样简单的东西来镜像图像,而不需要 StretchBlt 的过度杀伤力?或者如果源和目标大小相同,StretchBlt 是否不会影响性能?

0 投票
2 回答
2045 浏览

winapi - 透明的顶层窗口

我想创建一个透明的顶级(即不是 WS_CHILD)窗口。但是,我不希望它是一个简单的蒙版,其中给定的像素要么是完全透明的,要么是完全不透明的。而且我不希望整个窗口都具有一定的 alpha 级别。相反,我希望窗口基本上是完全透明的,并使用 alpha 通道绘制位图,以便位图与它后面的任何窗口混合。比如说,一个朝阳,图像自身的 alpha 从中心向外从不透明混合到完全透明。

我发现了两种方法都接近我想要做的,但不完全是。使用区域,我可以切出一个完全透明的部分。使用分层窗口,我也可以做类似的事情(甚至可以使整个窗口稍微透明,但这根本不是我想要的)。我研究了其他样式,例如 WS_EX_TRANSPARENT 和 WS_EX_COMPOSITE,但无济于事。

我可以让这种效果在子窗口上正常工作,因为它们在其父区域内与其父窗口混合。让它在顶级窗口中以类似方式工作仍然让我难以理解。

我知道这是可以做到的,因为人们向我保证他们已经在其他程序中看到了它。我觉得我只是没有完全理解这里关于绘画窗户的简单事情。

0 投票
3 回答
3437 浏览

c# - .Net 等效于 ScaleHeight 和 Scalewidth

基本上我想做的是让我的绘画工作更容易。

早在 VB6 时代,就有一种叫做 Scalewidth 和 Scaleheight 的东西,我可以将它们设置为自定义值。前任。100。

然后,当我需要在可用空间的中心绘制一个点时,我会在 50,50 处绘制它。

.Net 中有什么方法可以让我获得类似的功能吗?

因此,无论我得到多大的绘图画布,我都可以使用绝对坐标在上面绘图。

0 投票
7 回答
13529 浏览

c# - 如何在 .NET 中使用大位图?

我正在尝试编写一个轻量级的图像查看应用程序。但是,.NET 存在系统内存限制。

尝试加载大型位图(9000 x 9000 像素或更大,24 位)时,我收到 System.OutOfMemoryException。这是在具有 2GB RAM(其中 1.3GB 已用完)的 Windows 2000 PC 上。尝试加载文件也需要很多时间。

以下代码生成此错误:

与此代码一样:

此外,这样做就足够了:

后一个代码旨在与 GDI 一起使用。在研究这一点时,我发现这实际上是一个内存问题,其中 .NET 尝试在单个连续内存块中分配两倍于所需的内存。

http://bytes.com/groups/net-c/279493-drawing-large-bitmaps

我从其他应用程序(Internet Explorer、MS Paint 等)中知道可以打开大图像,而且速度相当快。我的问题是,如何在 .NET 中使用大型位图?

无论如何要流式传输它们,还是非内存加载它们?

0 投票
2 回答
5146 浏览

c# - 获取具有多个监视器的整个屏幕的 DeviceContext

我需要用 C# 在所有东西上画一条线(用鼠标)。我可以使用 P/Invoke 获取桌面窗口的 Graphics 对象:

DesktopGraphics = Graphics.FromHdc(GetDC(IntPtr.Zero));

然而,我使用这个图形对象绘制的任何东西都只显示在左显示器上,而在右显示器上什么也没有。它没有失败或任何东西,它只是没有显示。

创建 Graphics 对象后,它显示可见剪辑区域为 1680 x 1050,这是我左显示器的分辨率。我只能假设它只是获取左监视器的设备上下文。他们是获取两个(或任何数量)监视器的设备上下文的方法吗?


编辑 3/7/2009:有关我使用的修复程序的附加信息。

我使用 colithium 提供的修复程序提出了以下代码,用于为每个监视器创建图形对象以及存储偏移量的方法,以便我可以将全局鼠标点转换为图形表面上的有效点。

0 投票
6 回答
24665 浏览

c# - C#.NET 中的 JPEG 2000 支持

.NET 似乎无法使用 GDI 库打开 JP2 (Jpeg 2000) 文件。我在谷歌上搜索过,但找不到任何库或示例代码来执行此操作。

有人有什么想法吗?除非我必须这样做,否则我真的不想为图书馆付费。

0 投票
1 回答
1140 浏览

c# - 相当于 Gdi+ 中的 MM_ISOTROPIC 映射模式

我有一些使用各向同性映射模式的 C++/GDI 绘图代码。我有一个带有大量绘图代码的大型对象模型,我试图在 C# 项目中重用这些代码以绘制到内存位图。我在正确设置 System.Graphics 对象以生成相同的图片时遇到问题。有没有办法在 System.Graphics 对象中设置等效的 MM_ISOTROPIC 映射模式?

这是准备映射模式的 C++/GDI 的相关代码。

0 投票
3 回答
2863 浏览

windows-mobile - Windows mobile 或 CE 设备上的 GDI 性能

我有一个使用大量矢量图形的 Windows CE 应用程序,而且在某些地方速度很慢。我目前正在使用 GDI 通过位图进行渲染以实现无闪烁刷新。通常,我在大型 3d 地图的一部分上进行窗口化。在某些设备上(例如 166mhz SH4),对于大型数据集,刷新时间为 3-5 秒,这会变慢。我的问题是这个;

  • 有没有人比较过 Windows mobile 与 Win32 上图形操作的相对速度。换句话说,假设我们只查看 GDI 调用,则来自适用于 WinCE 版本的软件的 Win32 版本的分析结果。

  • 有没有人尝试过在 WinCE 平台(C++ 应用程序)上进行板载分析,如果是,使用什么工具。

  • 有谁知道在 Windows CE 上提高绘图速度的任何方法。我目前正在根据上一个问题的反馈查看 FastGraph ,但这是一个稍微长期的解决方案。糟糕的是,尽管如此,我正在为即将发布的版本寻找更快的实现方法。

0 投票
2 回答
500 浏览

asp.net - 是否可以即时将 ASP.NET 控件转换为图片?

在 ASP.NET 中,如果我有一个多行文本框(甚至是第 3 方富文本框),我可以在回发期间将其内容转换为图片吗?通过转换,我的意思是保留图片中的格式和内容。

例如,我有一个富文本编辑框,最终用户可以直接在上面添加花哨的文本字体和符号,一旦他们点击“提交”,有没有办法将这个富文本内容保存为位图?还是有这样一个具有此内置功能的第 3 方富编辑框?

我猜它可能需要 GDI+ 或 WPF,但只是不知道从哪里开始。

0 投票
2 回答
2375 浏览

c++ - 绘制到屏幕的 DC C++ 后强制屏幕重绘

我正在创建一个 Windows Mobile 自定义 SIP,当用户按下或“悬停”在键盘上的一个按钮上时,我使用 ::GetDC(NULL) 将其对应的选定图像(iPhone 式)绘制到屏幕的 DC。它是用 Win32 C++ 开发的。

我的问题是我永远无法让屏幕重新绘制自己,擦除先前绘制的键。我已经尝试了所有我能想到的强制它,::RedrawWindow() 使用 NULL 或任何 Get..Window 函数作为 HWND 的所有不同参数组合,以及所有标志组合 (INVALIDATE | UPDATENOW | ERASENOW | 所有儿童等)。我还尝试过使用 ::GetActiveWindow 和 ::GetForegroundWindow 使 rect 无效并强制重新绘制底层应用程序,使用 ::GetDesktopWindow 的变体等。我基本上已经没有想法了,这是阻止我的最后一件事在我的 Windows Mobile 设备上使用它。有没有人有任何想法?任何帮助将不胜感激。

我已经包含了一些截图来说明我的困境。

截图前 截图

在 http://img13.imageshack.us/img13/9861/cezoom1.png 之前 http://img3.imageshack.us/img3/7481/cezoom2.png

此 先感谢!