圖像特效---連環畫濾鏡
小時候我們都喜歡看連環畫,雖然是黑白色的,但是也能讓我們看的津津有味。
今天,我在這裏介紹一種連環畫特效的實現方法,帶你回到那個記憶的年代。
那個時代彩色的書籍是很少的,連環畫幾乎都是黑白色的,而且有些發黃的年代感,這個也就是它的主要特點;還有一個特點就是,畫面對比鮮明;針對這兩點,我們可以實現了。
具體步驟如下:
1,假設圖像像素P(i,j)的RGB值爲r,g,b;
按照如下公式計算新的RGB:
R = (|2*g-b+r|*r)>>8;
G = (|2*b-g+r|*r)>>8;
B = (|2*b-g+r|*r)>>8;
注意:這一步是達到對比度增強的效果。
2,計算灰度值:
Gray = (R+G+B) / 3;
注意:這裏直接使用了明度計算公式替代灰度化公式。
3,計算結果RGB:
Red = Gray + 10;
Green = Gray + 10;
Blue = Gray;
注意:此處Red,Green需要約束到[0,255]。
具體C#代碼如下:
private Bitmap FilterProcess(Bitmap a)
{
Bitmap srcBitmap = new Bitmap(a);
int w = srcBitmap.Width;
int h = srcBitmap.Height;
System.Drawing.Imaging.BitmapData srcData = srcBitmap.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
byte* pSrc = (byte*)srcData.Scan0;
int offset = srcData.Stride - w * 4;
int red = 0, green = 0, blue = 0, gray = 0;
for (int j = 0; j < h; j++)
{
for (int i = 0; i < w; i++)
{
blue = (Math.Abs(pSrc[0] - pSrc[1] + pSrc[0] + pSrc[2]) * pSrc[1]) >> 8;
green = (Math.Abs(pSrc[0] - pSrc[1] + pSrc[0] + pSrc[2]) * pSrc[2]) >> 8;
red = (Math.Abs(pSrc[1] - pSrc[0] + pSrc[1] + pSrc[2]) * pSrc[2]) >> 8;
blue = Math.Max(0, Math.Min(blue, 255));
green = Math.Max(0, Math.Min(green, 255));
red = Math.Max(0, Math.Min(red, 255));
gray = (blue + green + red) / 3;
red = Math.Min(255, gray + 10);
pSrc[0] = (byte)gray;
pSrc[1] = (byte)red;
pSrc[2] = (byte)red;
pSrc += 4;
}
pSrc += offset;
}
srcBitmap.UnlockBits(srcData);
return srcBitmap;
}
效果圖如下:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.