我需要能够使用 GDI 在屏幕上绘制具有特定分辨率(~40 DPI)的位图,并且还能够复制每个像素之间的间距。该空间是像素大小的一小部分,但它是肉眼可见的。
无论如何设置 Graphics 类或 Bitmap 让它在绘制的像素之间插入“空白”?在我自己编写复杂的代码来完成之前,我想确保我在某处没有遗漏一些设置。
听起来您想将图像从 40 dpi 拉伸到显示器的 ~110 dpi,但不是扩展像素,而是每英寸仅绘制 40 个像素,其余部分为白色。
我不知道 GDI 中有什么可以做到这一点。此外,除非您进行整数缩放,否则它看起来会非常糟糕 - 即原始位图中的每个像素只有一个或两个白色像素,这将严重限制您对最终尺寸的选择。您可能可以通过使用亚像素渲染(例如 ClearType)来稍微调整一下,但这将是您必须编写的更专业的代码(并且特定于监视器!)。就目前而言,您可能必须逐个像素地构建一个新的位图。
您可以通过创建一个 3x3 倍于源位图大小的新位图,将其绘制为白色,并且(伪代码)
foreach(point p in oldBitmap)
{
// draw a 2x2 box into every 3x3 box
newbitmap.DrawBox(p.x * 3, p.y * 3, 2, 2, p.Color);
}
DrawBitmap(target, newbitmap)
您可能需要添加一些单像素调整以在边缘周围获得漂亮的白色边框。
这仍然会留下 5/9 的像素白色,这意味着您将获得非常褪色的图像。
你是想模仿一个旧的显示器还是什么?
.Net 中的位图对像素之间的空间没有任何逻辑概念。我想你必须自己写这个。执行此操作时,请确保使用 Bitmap 的 LockBits 方法访问数据 - SetPixel 和 GetPixel 的速度非常慢。
更新:我今天很无聊,我想为你写这个。如果没有其他人有好的答案,我会在午饭后做。