2020년 7월 25일 토요일

WPF - Effect

Blur


1
2
3
4
5
<Button Content="버튼1" Width="100" Height="50">
    <Button.Effect>
        <BlurEffect Radius="10"/>
    </Button.Effect>
</Button>
cs


DropShadow


1
2
3
4
5
<Button Content="버튼1" Width="100" Height="50" Click="btn01_Click">
    <Button.Effect>
        <DropShadowEffect Color="Black" ShadowDepth="10" BlurRadius="15" Opacity="0.5" Direction="180"/>
    </Button.Effect>
</Button>
cs
그림자 위치, 방향을 잘 조절하면 네온효과도 가능.


ShaderEffect




WriteableBitmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
WriteableBitmap wb = new WriteableBitmap(1001009696, PixelFormats.Bgra32, null);
 
for (int x = 0; x < img.Height; x++)
{
    for (int y = 0; y < img.Width; y++)
    {
        byte b = (byte)(x % 256);
        byte g = (byte)(y % 256);
        byte r = 0;
        byte a = 255;
        byte[] p = { b, g, r, a };
 
        Int32Rect rect = new Int32Rect(x, y, 11);
        wb.WritePixels(rect, p, 4000);
    }
img.Source = wb;
cs

b,g,r,a 인 이유는 intel x86에서 바이트단위로 메모리에 저장할 때 역워드 저장방식이라 그럼.
저렇게 저장하면 읽을 땐 argb 로 읽힘.

WritePixels 의 400 은 width * bpp(rgba 니까 4) 의 결과임. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
BitmapImage bitmap = new BitmapImage(new Uri("../../../../Assets/Texture/렌탈여친.jpg", UriKind.Relative));
 
//WriteableBitmap wb = new WriteableBitmap((int)bitmap.Width, (int)bitmap.Height, 96, 96, PixelFormats.Bgra32, null);
WriteableBitmap wb = new WriteableBitmap(bitmap);
 
byte[] pixels = new byte[(int)wb.PixelWidth * (int)wb.PixelHeight * (int)wb.Format.BitsPerPixel / 8];
Int32Rect rect = new Int32Rect(00, wb.PixelWidth, wb.PixelHeight);
wb.CopyPixels(pixels, wb.PixelWidth * 40);
 
for(int y = 0; y < wb.PixelHeight; y++)
    for(int x = 0; x < wb.PixelWidth; x++)
    {
        int offset = (y * wb.PixelWidth + x) * 4;
        byte gray = (byte)((pixels[offset] + pixels[offset + 1+ pixels[offset + 2]) / 3);
        pixels[offset] = gray;
        pixels[offset + 1= gray;
        pixels[offset + 2= gray;
    }
 
wb.WritePixels(rect, pixels, (int)wb.PixelWidth * 40);
img.Source = wb;
cs

위는 흑백효과 코드.
wb.CopyPixel, wb.WritePixels 가 핵심.








댓글 없음:

댓글 쓰기

List