2009-07-27 77 views
1

我需要能夠使用GDI在屏幕上繪製特定分辨率(〜40 DPI)的位圖,並且還能夠複製每個像素之間的間距。空間是像素大小的一小部分,但它在眼睛中是顯而易見的。在像素之間插入空間

是否有無論如何設置圖形類或位圖讓它插入繪製像素之間的「空白」?在我寫完複雜的代碼後自己去做之前,我想確保沒有某種我在某處丟失的設置。

+0

什麼是像素之間的空白? – EFraim 2009-07-27 15:15:00

+0

你會通過簡單地調整圖形大小來完成同樣的事情嗎?根據你的環境(asp.net和C#或VB,我假設你的標籤)有簡單的函數,你可以調用最終的一個調整大小的位圖。也許不符合你的具體期望,但通常足夠好,這取決於源圖像的性質和你要去往和來自的尺寸。 – 2009-07-27 15:17:38

+0

@EFraim - 我希望間距可以調整...所以它真的不重要。它應該足以使其小於顯示器上真實像素的大小。 @Bob Kaufman - 正如我在下面的評論中提到的那樣,我試圖模擬一個老的液晶顯示器,它具有低分辨率,像素之間有空間,所以做一個簡單的調整大小不會削減它,因爲結果像素「彼此碰撞」。 – Nick 2009-07-27 15:50:33

回答

1

這聽起來像是你想從40dpi擴展到一個顯示器的〜110dpi的圖像,但不是擴大像素,每英寸只畫40個像素,剩下的是白色。

我不知道GDI中的任何事情都會這樣做。此外,除非您進行整數縮放 - 即原始位圖中的每個像素只有一個或兩個白色像素,否則會顯得非常糟糕,這將嚴重限制您的最終尺寸選項。你可能可以通過使用子像素渲染(例如ClearType)來調整這一點,但這將是更加專業化的代碼(和監視器特定的!),你必須編寫它們。就目前而言,您可能需要逐個像素地構建新的位圖。

你可以通過創建一個新的位圖,它是你的源位圖的大小3×3倍,畫吧白相當接近,和(僞)

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像素變白,這意味着您的圖像會非常褪色。

你想模擬一箇舊的顯示器或什麼?

0

.Net中的位圖沒有任何像素間空間的邏輯概念。我想你必須自己寫這個。當你這樣做時,確保你使用Bitmap的LockBits方法訪問數據 - SetPixel和GetPixel的速度非常慢。

更新:今天我很無聊,我想爲你寫這個。如果沒有其他人有一個好的答案,我會在午餐後做。