업데이트: 2007년 11월

이미지로 영역을 그립니다.

네임스페이스:  System.Windows.Media
어셈블리:  PresentationCore(PresentationCore.dll)
XAML의 XMLNS: http://schemas.microsoft.com/winfx/xaml/presentation

구문

public ref class ImageBrush sealed : public TileBrush
public final class ImageBrush extends TileBrush
<ImageBrush .../>
설명

ImageBrush는 콘텐츠를 이미지로 정의하는 TileBrush 형식이며, ImageSource 속성을 사용하여 지정합니다. 패턴 및 기타 효과를 만드는 동시에 이미지를 늘이고 정렬하고 바둑판식으로 배열하는 방법을 제어할 수 있습니다. 다음 이미지에서는 ImageBrush로 얻을 수 있는 몇 가지 효과를 보여 줍니다.

ImageBrush는 도형, 컨트롤, 텍스트 등을 채울 수 있음

ImageBrush 출력 예제

앞에서 설명한 것처럼 ImageBrushImageSource로 영역을 그립니다. ImageBrush와 함께 사용하는 가장 흔한 ImageSource 형식은 비트맵 그래픽을 나타내는 BitmapImage입니다. DrawingImage를 사용하면 Drawing 개체를 사용하여 그릴 수 있지만 대신 DrawingBrush를 사용하는 것이 더 간단합니다. ImageSource 개체에 대한 자세한 내용은 이미징 개요를 참조하십시오.

ImageBrush 기능에 대한 자세한 내용은 이미지, 그림 및 시각적 표시로 그리기를 참조하십시오.

Freezable 기능

ImageBrush 클래스는 Freezable에서 상속되기 때문에 몇 가지 특수 기능을 제공합니다. 예를 들어, ImageBrush 개체를 리소스로 선언하고, 여러 개체 간에 공유하고, 성능 향상을 위해 읽기 전용으로 설정하고, 복제하고, 스레드로부터 안전하게 보호할 수 있습니다. Freezable 개체에서 제공하는 여러 기능에 대한 자세한 내용은 Freezable 개체 개요를 참조하십시오.

예제

이 예제에서는 ImageBrush 클래스를 사용하여 이미지로 영역을 그리는 방법을 보여 줍니다. ImageBrush는 해당 ImageSource 속성에 지정된 단일 이미지를 표시합니다.

다음 예제에서는 ImageBrush를 사용하여 단추의 Background를 그립니다.

이 언어는 지원되지 않거나 사용할 수 있는 코드 예가 없습니다.
<!-- This example shows how to use an ImageBrush to paint shapes and controls. -->
<Page  
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  Background="White">

  <StackPanel Margin="20">

    <!-- Sets the button's Background property with an 
         ImageBrush. The resulting
         button has an image as its background. -->
    <Button
     Foreground="White" FontWeight="Bold"
     FontSize="16pt" FontFamily="Verdana" 
     Content="Berries"
     Padding="20" 
     HorizontalAlignment="Left">
      <Button.Background>
        <ImageBrush ImageSource="sampleImages\berries.jpg" />
      </Button.Background>
    </Button>
  </StackPanel>
</Page>


기본적으로 ImageBrush는 현재 그리고 있는 영역을 완전히 채우도록 이미지를 늘립니다. 앞의 예제에서는 단추를 채우기 위해 이미지가 늘어나는데 이 경우 이미지가 왜곡될 수 있습니다. TileBrushStretch 속성을 Uniform 또는 UniformToFill로 설정하여 브러시가 이미지의 가로 세로 비율을 유지하도록 하면 이 동작을 제어할 수 있습니다.

ImageBrushViewportTileMode 속성을 설정하면 반복되는 패턴을 만들 수 있습니다. 다음 예제에서는 이미지에서 만들어진 패턴을 사용하여 단추를 그립니다.

이 언어는 지원되지 않거나 사용할 수 있는 코드 예가 없습니다.
<!-- This example shows how to use an ImageBrush to paint shapes and controls. -->
<Page  
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  Background="White">

  <StackPanel Margin="20">

    <!-- Sets the button's Background property with an 
         ImageBrush. The resulting
         button has an image as its background. -->
    <Button
     Foreground="White" FontWeight="Bold"
     FontSize="16pt" FontFamily="Verdana" 
     Content="Berries"
     Padding="20" 
     HorizontalAlignment="Left">
      <Button.Background>

        <!-- The ImageBrush's Viewport and TileMode
             are set to produce a pattern from the
             image. -->
        <ImageBrush 
          Viewport="0,0,0.5,0.5" 
          TileMode="FlipXY"
          ImageSource="sampleImages\berries.jpg" />
      </Button.Background>
    </Button>
  </StackPanel>
</Page>


ImageBrush 클래스에 대한 자세한 내용은 이미지, 그림 및 시각적 표시로 그리기를 참조하십시오.

이 코드 예제는 ImageBrush 클래스에 대해 제공되는 보다 큰 예제의 일부입니다. 전체 샘플을 보려면 ImageBrush 샘플을 참조하십시오.

추가 코드

방법: 배경으로 사용된 이미지의 가로 세로 비율 유지 이 예제에서는 ImageBrushStretch 속성을 사용하여 이미지의 가로 세로 비율을 유지하는 방법을 보여 줍니다.
권한

상속 계층 구조

System::Object
  System.Windows.Threading::DispatcherObject
    System.Windows::DependencyObject
      System.Windows::Freezable
        System.Windows.Media.Animation::Animatable
          System.Windows.Media::Brush
            System.Windows.Media::TileBrush
              System.Windows.Media::ImageBrush
스레드로부터의 안전성

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.
플랫폼

Windows Vista

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

3.5, 3.0에서 지원

Computer/Image Processing

24비트나 32비트가 아닌 BMP 파일은 팔레트를 설정해줘야 그림이 제대로 뜬다.

안그럼 온통 검은 화면만 볼 수 있다.

 

// 파일을 연다.

m_Image.Load("lenna256.bmp");

// 동일한 속성의 이미지를 생성한다.

m_NewImage.Create(m_Image.GetWidth(), m_Image.GetHeight(), m_Image.GetBPP());

// 24 or 32 BPP 가 아닐경우 팔레트를 설정한다.

RGBQUAD ColorTable[256];

for(int i = 0; i < 256; i++)

{

ColorTable[i].rgbRed = i;

ColorTable[i].rgbGreen = i;

ColorTable[i].rgbBlue = i;

}

m_NewImage.SetColorTable(0, 255, ColorTable);

for(int i = 0; i < m_Image.GetHeight(); i++)

{

for(int j = 0; j < m_Image.GetWidth(); j++)

{

m_NewImage.SetPixel(j, i, m_Image.GetPixel(j, i));

}

}

UpdateAllViews(NULL);

pDoc->m_NewImage.Draw(pDC->GetSafeHdc(), 0, 0, pDoc->m_NewImage.GetWidth(), pDoc->m_NewImage.GetHeight());

 

출처 : http://sarojaba.tistory.com/67

대부분의 CImage 함수는 Windows 버전인 Windows 95/98, Windows NT 4.0 또는 Windows 2000에서만 작동합니다. 문서에서는 특정 메서드의 버전 제한을 설명합니다.

CImage::PlgBlt

CImage::MaskBlt

Windows NT 4.0 이상에서만 작동하고 Windows 95/98 이상에서 실행하는 응용 프로그램에서는 작동하지 않습니다.

CImage::AlphaBlend

CImage::TransparentBlt

사용하려면 msimg32.lib 링크해야 하므로 이러한 메서드는 Windows 2000 이상 Windows 98 이상에서만 작동합니다. ( 라이브러리는 Windows 2000 이상 Windows 98 이상에서 실행되는 응용 프로그램에만 사용할 있습니다.)

AlphaBlend TransparentBlt 이러한 메서드가 호출되지 않는 경우에만 Windows 95 또는 Windows NT 4.0에서 실행되는 응용 프로그램에 포함될 있습니다. 응용 프로그램에 이러한 메서드가 포함되어 있고 응용 프로그램을 이전 운영 체제에서 실행해야 하는 경우 링커의 /DELAYLOAD 사용하여 msimg32.lib 로드를 지연해야 합니다. Windows NT 4.0 또는 Windows 95에서 실행되는 동안 응용 프로그램에서 이러한 메서드 하나를 호출하지 않으면 msimg32.lib 로드를 시도하지 않습니다. CImage::IsTransparencySupported 메서드를 사용하면 투명도 지원 코드 사용 여부를 확인할 있습니다.

예제

복사

if (CImage::IsTransparencySupported())

// Safe to call CImage::AlphaBlend and CImage::TransparentBlt

else

// Transparency not supported. Fall back to something else.

이러한 메서드를 호출하는 응용 프로그램을 컴파일하려면 #including 시스템 헤더 앞에 Windows 버전이 5.0보다 크거나 같음을 나타내는 #define _WIN32_WINNT 문을 삽입합니다.

복사

#define _WIN32_WINNT 0x0500

응용 프로그램을 Windows 2000 또는 Windows 98 이전의 운영 체제에서 실행할 필요가 없는 경우 /delayload 사용하지 않고 직접 msimg32.lib 링크할 있습니다.

CImage::Draw

Windows 2000 Windows 98에서 사용하는 경우와 Windows NT 4.0 또는 Windows 95에서 사용하는 경우에 서로 다르게 작동합니다.

0x0500 이하로 설정된 _WIN32_WINNT 사용하여 응용 프로그램을 컴파일하면 Draw 작동하지만 Windows 2000 Windows 98 이상에서 실행되는 시스템에서 투명도를 자동으로 처리하지 않습니다.

0x0500 이상으로 설정된 _WIN32_WINNT 사용하여 응용 프로그램을 컴파일하면 Windows 2000 Windows 98 이상에서 실행되는 시스템에서 Draw 투명도를 자동으로 처리합니다. Windows NT 4.0 Windows 95에서는 Draw 작동하지만 투명도는 지원하지 않습니다. 그러나 위에서 설명한 AlphaBlend TransparentBlt 경우처럼 /delayload 사용하여 msimg32.LIB 로드를 지연해야 합니다.

원래는 psp게임 "스즈미야 하루히의 약속"
 http://b.bngi-channel.jp/psp-haruhi/sos.html 게임을 보고.. 이거 굉장하다 생각하면서
졸업작품에 적용시킬겸 만들었다..

사용자 삽입 이미지


아직 부족한 프로그램이고..
실제 저 하루히에 적용된 프로그램은.. 굉장한거 같다.

스즈미야 하루히의 약속에 적용된 기술도 어디 기획 차원에서 만든게 아니고
http://www.motionportrait.com/about/ 이곳의 모션포트레이트 인가 하는 회사의 기술이다.
일단 보고.. 대강 와핑 기술을 쓴건 아닌가 하고 여러 삽질끝에 만들어 버리긴 했지만..
정말 그들은 와핑을 쓴걸까 ... 보면 볼수록 신기

+ Recent posts