Posts tagged ·

image

·...

이미지 효과 – 픽셀 벤더 2.1 릴리즈

no comments


Pixel Bender Technology Center

픽셀벤더에 관심을 갖게 되어 이곳 저곳을 돌아다녀보니 2.1 버전이 2010.07.04일 출시가 되었다.
버전업이 지속적으로 일어난다는 것은 그 만큼 수요가 급증한다는 것으로 봐도 될 것이다.

픽셀 벤더를 늦게나마 접하고 R&D를 시작했다.
앞으로 이미지에 대한 효과들이 더욱 더 활성화 될 것으로 진단하기 때문이랄까??

픽셀 벤더가 매력적인 것은 일반적인 이미지와 이 기종 하드웨어에서 런타임 최적화를 제공하기 때문이다.
현재 툴킷을 사용하는 사람들은 두 말할 필요가 없다고 생각할 것이다.

픽셀 벤더 툴킷은 IDE(통합 개발 환경 : an integrated development environment for Pixel Bender)을 갖고 있다.
이미지 두 개의 커널을 사용할 수 있고, ShaderJob을 사용하면 응용 프로그램의 기본 실행과 별도로 실행이 된다는 것이다.

픽셀 벤더가 무조건 좋다고는 보지 않는다. 모든 것은 과하면 좋지 않다.
적재적소 하게 사용하여 최상의 효과를 획득하는 것이야말로 인터렉티브 인이 갖추어야 할 마인드이다.

이것 말고도 이미지 효과를 주기 위한 책 소스도 분석 중이다.
책(AS3 Image Effects)은 없고 소스만 다운 받아서 보고 있는데,
이 책에서도 픽셀 벤더의 효과를 다루는 것을 보았다.

내가 깨달은 것은 “나는 AS3을 잘 다루고 있지 않았구나…”라는 것이다.
앞으로 남들보다 더욱 더 노력해야 한다는 생각뿐이다.

비트맵 확대/축소 시 품질 향상시키기

no comments

이미지를 사용함에 있어 커다란 이미지를 썸네일화 할때 아래와 같이 Matrix를 사용하여
원본 객체에서 비트맵을 재 생성하여 사용하곤 하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/** 원천 비트맵 데이터를 리사이징하여 리턴한다. */
public function getResizeBtm(_w:Number = 0, _h:Number = 0):Bitmap
{
	var btm:Bitmap;
	var btmd:BitmapData;
 
	btmd = new BitmapData( _w, _h, true, 0x00000000 );
 
	var w:Number = _w / this.loader.width;
	var h:Number = _h / this.loader.height;
	btmd.draw( this.loader,  new Matrix(w, 0, 0, h, 0, 0) );
	btm = new Bitmap(btmd, "auto", true);
 
	return btm;
}

물론, 이미지가 큰 경우는 썸네일과 큰 이미지를 분리한다.
하지만 어중간한 이미지 같은 경우, 대략 500×500 정도 된다면은 로드하여 위와 같이 줄여서 사용해도 무방하다.

하지만, 이 포스트는 어중간한 이미지의 사이즈를 확대/축소 했을때의 퀄리티를 유지하기 위한 것이다.
500×375 이미지를 100×75 이미지로 줄인다고 가정했을 경우 얼마나 이미지 품질이 떨어질까?

우선 아래의 두 이미지를 보자. 배경은 1:1의 이미지이고, 좌상단의 썸네일 100×75로 Matrix를 사용하여 생성했다.

그리고 같은 크기로 아래와 같이 줄였다. 눈으로 보기에는 전혀 품질이 떨어졌는지를 확인할 수 없다.

하지만, 아래와 같이 확대를 했을 경우 퀄리티 차이를 적날하게 실감할 수 있다.

아래는 2배 축소된 이미지를 로드 후 확대하여 Matrix와 Shader, bicubic Shader에 적용한 결과이다.
Matrix

Shader

bicubic Shader

차이가 느껴지는지?? 자세히 보면 바로 주변의 색을 얼마나 완벽하게 반영한 것인가다.

개인적으로 bicubic이 Shader와 눈에 크게 차이가 나지 않는다.
이정도 차이라면 Shader를 사용하는 것이 좋다고 판단한다.
플래시에선 극한 최적화란 적용할때 그 만큼 계산이 CPU 퍼포먼스를 잡아먹기 때문이다.

정말 위 이미지를 자세히 보았다면? 색상의 주변의 이글거림이 bicubic이 좀 더 심하다.
이상하여 공식을 봤지만 제대로 적용한 것.

아래의 SWF는 mouseX, mouseY 값 중 최소값을 사용하여 위 이미지 두번째인 Shader를 적용한 이미지 리사이징이다.
마우스 우측 버튼을 눌러서 확대를 하여 직접 퀄리티가 어느정도로 떨어지는가를 볼 수 있을 것이다.

사용한 쉐이더는 히카형의 “BitmapData 확대축소 문제해결“의 PBK를 토대로 만들었다.

SL3 : Image Movement(DoubleAnimation)

1 comment

요번에는 Image Class를 사용해서 이미지의 움직임을 만들어봤다.
기본적으로 두가지 방법으로 코드가 가능한다. XAML(쟈멜)과 C#에서 바로 코드를 작성할 수 있다. 현재는 초보 수준이므로 두가지를 동시에 사용하고 있다. 이전 만들어봤던 Rectangle Movementd 에서 Image Class로 바꿔 코딩만 했다.


source download

Image Class를 읽어 보면 ImageSource Class를 상속 받고 있으며, BitmapImage Class를 생성이 된다는 것을 확인 할 수 있다. 아직 내가 margin을 사용하는 법을 정확히 몰라 요번 것은 Canvas Class를 사용하여 객체 네임을 참조하여 이동하게 하였다.

이전 코드와 비슷하기 때문에 변경된 XAML 코드만 적어두겠다.

1
2
3
4
5
6
<!-- Canvas에서 자유롭게 이동할 Image 객체를 그려둔다. (좌,상단 좌표 0,0) -->
<Canvas x:Name="myImg" Width="80" Height="80">
        <Image  Source="/silverlight/ver3/images/jinuiny.jpg" 
                    Stretch="None"
         />
</Canvas>

다음에는 C# 코드만을 사용해서 작성해 봐야 겠다.