[WP 7.5] 結合Toolkit GestureService 圖片裁切遭遇橫幅照片處理
昨天寫了一篇[WP 7.5] 結合Toolkit GestureService 進行圖片裁切的文章
使用的裁切方式為正方形
經過多張照片後發現到一個問題
就是當照片為800*600的橫幅照片時
發現到裁切邊界可以超過橫幅照片的邊界
因為在Image的Stretch預設為Uniform時
這個設定有當邊界超過時候會將照片依據比例縮小並且置中的特性
如果不想要使用者操作出超過邊界的照片時
就必須進行邊界的調整
裁切前 裁切後
我預設照片的邊界為480,這個為Windows Phone目前可顯示的寬度
所以就必須計算出經過縮放後高的值
首先先定義出幾個重要的變數值
1.cHeight:經過縮放後的照片高度
2.minHeight:上邊界y軸值
3.maxHeight:下邊界y軸值
縮放後高度 = 照片實際高度 x Image物件的寬度 / 照片實際寬度
也就是
cHight = bitimg.PixelHeight * oriPhoto.Width / bitimg.PixelWidth;
得到高度後就可以計算出縮放後高度的上下邊界
minHeight = (oriPhoto.Height - cHight) / 2;
maxHeight = minHeight + cHight;
接著就要對裁切框定位進行微調
transform.TranslateX = x = (oriPhoto.Width - BorderCut.Width) / 2;
transform.TranslateY = y = minHeight;
之後在滑鼠放開後必須進行裁切框邊界的控制
if (x < 0)
x = transform.TranslateX = 0;
if (BorderCut.Width > oriPhoto.Width)
{
x = transform.TranslateX = 0;
BorderCut.Height = BorderCut.Width = oriPhoto.Width;
}
if (y < minHeight)
y = transform.TranslateY = minHeight;
if (BorderCut.Height > cHight)
{
x = transform.TranslateX = 0;
y = transform.TranslateY = minHeight;
BorderCut.Height = BorderCut.Width = cHight;
}
if ((x + BorderCut.Width) > CanvasImg.Width)
x = transform.TranslateX = CanvasImg.Width - BorderCut.Width;
if ((y + BorderCut.Width) > maxHeight)
y = transform.TranslateY = maxHeight - BorderCut.Width;
以上為我的作法,不過還是希望官方能提供圖片裁切的工具![]()
附上這個專案PhotoGesture.zip給大家參考~~~![]()
