27.Flutter:成為Canvas繪製大師(三)

CoorChice發表於2019-03-24

目錄傳送門:《Flutter快速上手指南》先導篇

繪製圖片drawImage()

繪製圖片。

? e.g.:

canvas.drawImage(background, Offset(100, 100), paint);
複製程式碼

? 效果:

很簡單,不是嗎?

⚠️ 需要注意的是,Offset 被用來設定圖片的 左上角 相對於繪製區域的 左上角 的偏移量。

你從上面的效果圖中也能看到它的作用。

繪製圖片drawImageRect()

該繪製函式,可以把圖片上的一個矩形部分,以填充至滿的形式繪製到另一個矩形中。

不理解?

看個例子也許就清晰了。

? e.g.:

Rect dstRect = Rect.fromLTWH(0, 0, size.width, size.height);
canvas.drawImageRect(background, Rect.fromLTWH(0, 0, 100, 100), dstRect, paint);
複製程式碼

? 效果:

在這個例子中,將圖片的左上角區域,拉伸填充到整個螢幕。

再看一個例子?,幫助加深理解。

? e.g.:

Size imgSize = Size(
    background.width.toDouble(), background.height.toDouble());
Rect dstRect = Rect.fromLTWH(0, 0, size.width, size.height);
// 根據適配模式,計算適合的縮放尺寸
FittedSizes fittedSizes = applyBoxFit(
    BoxFit.cover, imgSize, dstRect.size);
// 獲得一個圖片區域中,指定大小的,居中位置處的 Rect
Rect inputRect = Alignment.center.inscribe(
    fittedSizes.source, Offset.zero & imgSize);
// 獲得一個繪製區域內,指定大小的,居中位置處的 Rect
Rect outputRect = Alignment.center.inscribe(
    fittedSizes.destination, dstRect);
canvas.drawImageRect(background, inputRect, outputRect, paint);
複製程式碼

? 效果:

上面的例子中,基於圖片的中心位置,選取了適合部分,將填充至整個螢幕。

例子通過 applyBoxFit() 函式,根據適配模式計算了對應的縮放尺寸,其中 BoxFit 有多種模式,具體可檢視官方的說明:BoxFit API

目錄傳送門:《Flutter快速上手指南》先導篇

如何找到我?

傳送門:CoorChice 的主頁

傳送門:CoorChice 的 Github


相關文章