2014-11-18 1 views
0

Я пытаюсь заполнить изображение внутри прямоугольника. Я смог правильно установить положение изображения в крайний левый угол прямоугольника. Однако масштабирование не работает должным образом. Любая помощь по этому поводу ценится. Ниже мой код. Это изображение размером 1290 * 1990.Заполните прямоугольник изображением с помощью библиотеки Mono Cairo

 Cairo.Rectangle imageRectangle = new Cairo.Rectangle(50, 100, width, height); 

     ctx.NewPath(); 
     Cairo.ImageSurface imgSurface = new Cairo.ImageSurface("C:/Temp/Image.png"); 
     ctx.SetSource(imgSurface, topLeftPoint); //topLeft is (50,100) 

     float xScale = (float)imageRectangle.Width/(float)imgSurface.Width; 
     float yScale = (float)imageRectangle.Height/(float)imgSurface.Height; 

     //Reposition the image to the rectangle origin 
     ctx.Translate(imageRectangle.X, imageRectangle.Y); 
     ctx.Scale(xScale, yScale); 

     ctx.Paint(); 

Спасибо!

+0

Каковы значения 'xScale' и' yScale'? – kennyzx

+0

Рассчитано динамически. В одном из тестовых примеров это значения, imageRectangle.Width = 387.7299, \t \t imageRectangle.Height = 596.663147, So xScale = 0.299868435 и yScale = 0.299830735 –

ответ

2

Я нашел решение. Я устанавливал источник в неправильном месте. Ниже приведен правильный код

Cairo.Rectangle imageRectangle = new Cairo.Rectangle(50, 100, width, height); 

    ctx.NewPath(); 
    Cairo.ImageSurface imgSurface = new Cairo.ImageSurface("C:/Temp/Image.png"); 


    float xScale = (float)imageRectangle.Width/(float)imgSurface.Width; 
    float yScale = (float)imageRectangle.Height/(float)imgSurface.Height; 

    //Reposition the image to the rectangle origin 
    ctx.Translate(imageRectangle.X, imageRectangle.Y); 
    ctx.Scale(xScale, yScale); 

    ctx.SetSource(imgSurface); 
    ctx.Paint(); 

Спасибо!