簡體   English   中英

如何在netpbm圖像中繪制平滑像素?

[英]How can I draw smooth pixels in a netpbm image?

我只是寫了一個小netpbm解析器,我很開心,主要繪制了參數方程式。 他們第一次看起來不錯,但是我如何擴展它並擁有看起來合法的東西? 這張照片是我的方法如何重新創建了北極猴子徽標

0.5[cos(19t) - cos(21t)] (我想先繪制兩個余弦,然后再進行疊加) 在此處輸入圖片說明

它顯然看起來非常“酥脆”且鋒利。 我使用了盡可能小的步長,而無需花費很多時間來完成。 (0.0005,耗時<5秒)

我唯一的想法是,當繪制白色像素時,我還應使用稍微淺一些的灰色繪制其直接鄰居。 然后用更淺的灰色繪制THOSE像素的鄰居。 幾乎像白色是“溶解”或“消散”。

我沒有嘗試實現它,因為這樣做確實感覺很糟糕,我什至不確定它會產生任何接近理想效果的東西,所以我想我先問一下。

編輯:這是一個示例代碼,僅繪制了一個小螺旋

繪制循環:

for (int t = 0; t < 6 * M_PI; t += 0.0005)
    {
        double r = t;
        new_x = 10 * r * cosf(0.1 * M_PI * t);
        new_y = -10 * r * sinf(0.1 * M_PI * t);
        img.SetPixel(new_x + img.img_width / 2, new_y + img.img_height / 2, 255);
    }

//img is a PPM image with magic number P5 (binary grayscale)

SetPixel:

void PPMimage::SetPixel(const uint16_t x, const uint16_t y, const uint16_t pixelVal)
{
    assert(pixelVal >= 0 && pixelVal <= max_greys && "pixelVal larger than image's maximum max_grey\n%d");
    assert(x >= 0 && x < img_width && "X value larger than image width\n");
    assert(y >= 0 && y < img_height && "Y value larger than image height\n");


    img_raster[y * img_width + x] = pixelVal;
}

這就是這段代碼產生的

在此處輸入圖片說明

散點圖 (由點而不是線組成)的一種非常基本的抗鋸齒形式可以通過應用隨機舍入來實現:將畫筆視為像素大小的正方形(但請注意此模型的嚴格限制 ),居中在繪制點的非整數坐標處,並計算其與共享最接近該點的角的四個像素的重疊度。 將重疊部分視為灰度部分,並將大量像素逼近一條線,將每個像素設置為最大值 ,或者對少量離散點進行alpha 混合

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM