- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
RenderTargetBitmap 移除将 RichtextBox 的 TextRenderingMode 降级为 GreyScale。所以捕获的 PNG 看起来质量很差,并且与 WPF 控件不匹配
如果我使用 WINDOWS ALT+PRINT SCREEN,则可以完美地捕获文本。
那么如何将文本控件呈现为与 ALT+PRINT SCREEN 相同的质量。
任何建议将不胜感激
祝一切顺利
最佳答案
您可以使用与使用 Alt + Print Screen 截屏时使用的窗口相同的技术将窗口渲染到位图中。这个想法是获取一个窗口句柄,然后使用 BitBlt 将其渲染为位图。系统调用。
下面是一个示例(您需要在项目中引用 System.Drawing.dll 程序集才能使其工作):
public static void SaveToBitmapNative(Window window, FrameworkElement element, string fileName)
{
WindowInteropHelper helper = new WindowInteropHelper(window);
// detect the window client area position if rendering a child element
double incX = 0, incY = 0;
if (window != element)
{
System.Drawing.Point pos = new System.Drawing.Point(0, 0);
ClientToScreen(helper.Handle, ref pos);
incX = pos.X - (int)window.Left;
incY = pos.Y - (int)window.Top;
}
// transform child position to window coordinates
GeneralTransform transform = element.TransformToVisual(window);
Point point = transform.Transform(new Point(0, 0));
Rect rect = new Rect(point.X + incX, point.Y + incY, element.ActualWidth, element.ActualHeight);
// render window into bitmap
using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(
(int)rect.Width, (int)rect.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
{
using (System.Drawing.Graphics memoryGraphics = System.Drawing.Graphics.FromImage(bitmap))
{
IntPtr dc = memoryGraphics.GetHdc();
IntPtr windowDC = GetWindowDC(helper.Handle);
BitBlt(dc, 0, 0, (int)rect.Width, (int)rect.Height,
windowDC, (int)rect.Left, (int)rect.Top, TernaryRasterOperations.SRCCOPY);
memoryGraphics.ReleaseHdc(dc);
ReleaseDC(helper.Handle, windowDC);
}
// save bitmap to file
bitmap.Save(fileName);
}
}
[DllImport("gdi32.dll")]
static extern bool BitBlt(IntPtr hdcDest, int xDest, int yDest, int wDest, int hDest, IntPtr hdcSource, int xSrc, int ySrc, TernaryRasterOperations rop);
[DllImport("user32.dll")]
public static extern IntPtr GetWindowDC(IntPtr ptr);
[DllImport("user32.dll")]
static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDc);
[DllImport("user32.dll")]
static extern bool ClientToScreen(IntPtr hWnd, ref System.Drawing.Point lpPoint);
public enum TernaryRasterOperations : uint
{
SRCCOPY = 0x00CC0020,
SRCPAINT = 0x00EE0086,
SRCAND = 0x008800C6,
SRCINVERT = 0x00660046,
SRCERASE = 0x00440328,
NOTSRCCOPY = 0x00330008,
NOTSRCERASE = 0x001100A6,
MERGECOPY = 0x00C000CA,
MERGEPAINT = 0x00BB0226,
PATCOPY = 0x00F00021,
PATPAINT = 0x00FB0A09,
PATINVERT = 0x005A0049,
DSTINVERT = 0x00550009,
BLACKNESS = 0x00000042,
WHITENESS = 0x00FF0062
}
private void saveButton_Click(object sender, RoutedEventArgs e)
{
// saves the entire window into the bitmap
SaveToBitmapNative(this, this, "c:\\test0.png");
// saves a child control (RichTextBox) into the bitmap
SaveToBitmapNative(this, richTextBox, "c:\\test1.png");
}
关于WPF RenderTargetBitmap 将 TextRenderMode 缩小到 GreyScale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5291670/
RenderTargetBitmap 移除将 RichtextBox 的 TextRenderingMode 降级为 GreyScale。所以捕获的 PNG 看起来质量很差,并且与 WPF 控件不匹配
在尝试使用 scipy 的 python 2.7 探索过程中,我制作了以下简单脚本: #!/usr/bin/env python # coding=utf-8 # -*- Mode: python;
我正在尝试在屏幕上显示灰度纹理。我通过创建我的纹理 glGenTextures(1, &heightMap); glBindTexture(GL_TEXTURE_2D, heightMap); glT
免责声明:我没有计算机视觉或图像处理方面的经验,但我需要处理视频以获取机器学习的数据。 我希望阅读一部灰度电影(我使用灰度图像制作的) - 使用 moviepy 逐帧阅读。为了进一步处理,我需要灰度帧
我有一个灰度 TIF 文件。我需要将它转换为 RGB/以我可以使用它的方式从中读取。 img = Image.open(GIF_FILENAME) rgbimg = img.convert('RGB'
我想做什么 文件:TIFF,2 页,灰度,16 位 OpenCV:2x Mat,灰度,16 位 (CV_16UC1) Qt:2x QImage,灰度,8 位 (Format_Greyscale8) 我
最近对我网站上的社交图标进行了一些更改,并希望社交图标在加载帖子时变灰 here , 但是当用光标靠近它时,返回它们原来的颜色,就像我做的一样 here .我在 CSS 中搜索,但没有找到靠近按钮时悬
作为初学者,我只想通过 OpenCV 将位图转换为灰度。我已拥有一切正在运行,但一旦我想将图像转换为灰度,它就会崩溃。任何人都可以帮忙吗?我希望这些 fragment 足够了,如果不够我可以附上其余部
我是一名优秀的程序员,十分优秀!