2011-09-07 2 views
3

크기가 width = 1000, height = 16 인 직사각형 영역 위에 이미지 (16x16)를 바꿔서 TextureBrush를 사용하여 UI 같은 모양을 얻으려고합니다.C에서 TextureBrush를 사용하여 다른 높이에서 시작하는 이미지 타일링 문제

Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16); 
using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile)) 
{ 
    e.Graphics.FillRectangle(brush, myIconDrawingRectangle); 
} 

x = 0, y = 0으로 그릴 때 (0,0)부터 예상대로 타일링이 발생합니다.

x = 0, y = 50으로 그릴 때 (0,50)에서 타일링이 시작되지만 그림 사각형이 이미지의 시작으로 시작하지 않습니다. 이미지의 자른 부분부터 시작하여 반복됩니다.

해결 방법?

P.S : DrawImage를 통해 반복적으로 반복적으로 반복하고 싶지 않습니다.

답변

9

는 사각형의 시작을 보장하기 위해 이미지의 시작과 함께 시작 우리는 사용 변환이 아래 코드를 참조하십시오.

Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16); 
using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile)) 
{ 
    brush.TranslateTransform(x,y); 
    e.Graphics.FillRectangle(brush, myIconDrawingRectangle); 
} 

나는 이것을 발견했습니다. link이 도움이됩니다. 브러시와 변형에 대해 자세히 설명합니다. u는이 작업을 수행하지 않는 경우, 시작 지점을 설정하는 TransalteTransform()를 사용하여

+3

+1! 고마워요! 내 하루를 구했다 –

+0

놀랍다, 나는 금요일 저녁 내내 이걸 고투했다. 월요일 아침에 나는 이것을 읽고 내 문제를 해결했다. 감사! –

3

Windows Forms 응용 프로그램에서이 작업을 시도했지만 y == 14 일 때 (0, 14)에서 그리기 작업이 예상대로 작동합니다. y이 16, 32 등으로 설정 될 수 있습니까? 그것을 할당하고 직사각형이 만들어지는 시간?

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 

    Image myIcon = Image.FromFile(@"C:\Users\me\Pictures\test.jpg"); 

    int x = 0; 
    int y = 14; 

    Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16); 
    using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile)) 
    { 
     e.Graphics.FillRectangle(brush, myIconDrawingRectangle); 
    } 

    e.Graphics.DrawLine(Pens.Black, 0, 16, 1000, 16); 
} 

및 결과 : 여기

내가 테스트하는 데 사용되는 코드입니다

enter image description here

+0

첫째, 답장을 보내 주셔서 감사합니다. 나는 그것이 잘못된 것처럼 지금 질문을 수정해야합니다. 나는 그것을 지금 알았다. 그 때 이상한 것처럼 보였을 수도 있습니다. 나는 이제 실제 문제를 발견했으며 해결 방법이기도합니다. 나는 다음 주석에서 설명 할 것이다. –

+0

내가 사용하는 이미지 픽셀 패턴은 상단이 어둡고 하단이 점차적으로 어둡게 보이고 하단의 색상은 배경 배경과 비슷합니다. 실제 문제는 높이로 그릴 때 그려진 사각형 영역이 이미지의 시작으로 시작한다는 보장이 없다는 것입니다. 따라서 내 이미지의 본질 때문에 다른 높이로 그려지고 있다는 착각을 불러 일으켰습니다. 그러나 실제로는 정확한 높이로 그려지기 시작했습니다. 직사각형의 시작 부분이 이미지의 시작으로 시작하지 않았 음을 나타냅니다. 이것은 해결해야 할 문제입니다. 그에 따라 질문을 업데이트 할 것입니다. –

+0

올바른 행동을 확인하고 확인하기위한 투표. 그 때문에 다른 각도에서 문제를 조사하게되었습니다. –

1

은, 타일링 일부 아래와 같이,이 corect하는 오프셋 것입니다 : 모든

brush.TranslateTransform(0,50); 
관련 문제