在像素之间插入空格

时间:2009-07-27 15:13:58

标签: .net gdi

我需要能够使用GDI在屏幕上绘制特定分辨率(~40 DPI)的位图,并且还能够复制每个像素之间的间距。空间只是像素大小的一小部分,但它的眼睛却很明显。

有没有设置Graphics类或Bitmap让它在绘制的像素之间插入“空白”?在我自己编写复杂的代码之后,我想确保没有某些设置我在某处丢失。

2 个答案:

答案 0 :(得分:1)

听起来你想要将图像从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的像素变为白色,这意味着您的图像会非常褪色。

您是要尝试模仿旧显示器还是什么?

答案 1 :(得分:0)

.Net中的位图没有像素之间空间的任何逻辑概念。我想你必须自己写这个。执行此操作时,请确保使用位图的LockBits方法访问数据 - SetPixel和GetPixel的速度令人难以置信。

更新:今天我很无聊我想为你写这个。如果没有其他人有一个好的答案,我会在午餐后这样做。