Qml OpacityMask 降低图像质量
Qml OpacityMask reduces image quality
我有一个包含图像的矩形。
我正在尝试创建一个带有黑色边框的圆形图像。
我试过使用 OpacityMask,但当我这样做时,它会降低图像质量。
在边框和图像之间的某些地方也有非常少量的白色 space。
我已经提供了下面的代码。注释掉的行是我尝试过但无济于事的事情。我也尝试过使用单独的同级 OpacityMask 将 Rectangle 和 Image 同级包含在一个 Item 中,但得到了相同的结果。
有没有人知道更好的方法。
还有谁知道创建边框的更好方法 - 目前我正在使用
停止覆盖边框的图像
anchors.margins: imageRect.border.width
Rectangle {
id: imageRect
property int spacer: 10
property int spacedWidth: imageDel.width - spacer
anchors.horizontalCenter: parent.horizontalCenter
width: spacedWidth
height: spacedWidth / imageListModel.getImageWToHRatio()
border.color: "black"
border.width: 2
radius: imageRadius
//clip: true
Image {
id: image
source: "image://lmImageProvider/" + rowIndex + "_" + index
//sourceSize: Qt.size(parent.width, parent.height)
anchors.fill: parent
anchors.margins: imageRect.border.width
cache: false
//visible: false
//fillMode: Image.PreserveAspectCrop
layer.enabled: true
layer.smooth: true
//layer.textureSize: "600x900"
layer.effect: OpacityMask {
maskSource: imageRect
// cached: true
}
//mipmap: true
property bool reload: reloadImageRole
onReloadChanged: {
source = ""
source = "image://lmImageProvider/" + rowIndex + "_" + index
}
MouseArea {
anchors.fill: parent
onClicked: {
imageListModel.toggleSelected(rowIndex + "_" + index)
}
}
}
}
仍然不确定为什么上面的代码不起作用。
也不确定为什么我最初在 "making the Rectangle and Image siblings contained within an Item with a separate sibling OpacityMask" 上的尝试(基于 Stack Overflow 中的另一个答案)没有奏效。
但是经过进一步调查,我发现了另一个答案,它与确实有效的 "making the Rectangle and Image siblings contained within an Item with a separate sibling OpacityMask" 略有不同。更新后的代码如下:
Rectangle {
id: imageRect
property int spacer: 10
property int spacedWidth: imageDel.width - spacer
anchors.horizontalCenter: parent.horizontalCenter
width: spacedWidth
height: spacedWidth / imageListModel.getImageWToHRatio()
border.color: "black"
border.width: indImageBorderWidth
radius: indImageRadius
Image {
id: image
source: "image://lmImageProvider/" + rowIndex + "_" + index
anchors.fill: parent
anchors.margins: imageRect.border.width - 2
cache: false
visible: false
property bool reload: reloadImageRole
onReloadChanged: {
source = ""
source = "image://lmImageProvider/" + rowIndex + "_" + index
}
}
Rectangle{
id: maskRect
anchors.fill: image
radius: indImageRadius - 3
visible: false
z: image.z + 1
}
OpacityMask {
anchors.fill: image
source: image
maskSource: maskRect
}
MouseArea {
anchors.fill: parent
onClicked: {
//imageListModel.toggleSelected(rowIndex + "_" + index)
console.log("Image Clicked: " + rowIndex + "_" + index)
}
}
}
我有一个包含图像的矩形。 我正在尝试创建一个带有黑色边框的圆形图像。 我试过使用 OpacityMask,但当我这样做时,它会降低图像质量。 在边框和图像之间的某些地方也有非常少量的白色 space。 我已经提供了下面的代码。注释掉的行是我尝试过但无济于事的事情。我也尝试过使用单独的同级 OpacityMask 将 Rectangle 和 Image 同级包含在一个 Item 中,但得到了相同的结果。
有没有人知道更好的方法。 还有谁知道创建边框的更好方法 - 目前我正在使用
停止覆盖边框的图像anchors.margins: imageRect.border.width
Rectangle {
id: imageRect
property int spacer: 10
property int spacedWidth: imageDel.width - spacer
anchors.horizontalCenter: parent.horizontalCenter
width: spacedWidth
height: spacedWidth / imageListModel.getImageWToHRatio()
border.color: "black"
border.width: 2
radius: imageRadius
//clip: true
Image {
id: image
source: "image://lmImageProvider/" + rowIndex + "_" + index
//sourceSize: Qt.size(parent.width, parent.height)
anchors.fill: parent
anchors.margins: imageRect.border.width
cache: false
//visible: false
//fillMode: Image.PreserveAspectCrop
layer.enabled: true
layer.smooth: true
//layer.textureSize: "600x900"
layer.effect: OpacityMask {
maskSource: imageRect
// cached: true
}
//mipmap: true
property bool reload: reloadImageRole
onReloadChanged: {
source = ""
source = "image://lmImageProvider/" + rowIndex + "_" + index
}
MouseArea {
anchors.fill: parent
onClicked: {
imageListModel.toggleSelected(rowIndex + "_" + index)
}
}
}
}
仍然不确定为什么上面的代码不起作用。 也不确定为什么我最初在 "making the Rectangle and Image siblings contained within an Item with a separate sibling OpacityMask" 上的尝试(基于 Stack Overflow 中的另一个答案)没有奏效。 但是经过进一步调查,我发现了另一个答案,它与确实有效的 "making the Rectangle and Image siblings contained within an Item with a separate sibling OpacityMask" 略有不同。更新后的代码如下:
Rectangle {
id: imageRect
property int spacer: 10
property int spacedWidth: imageDel.width - spacer
anchors.horizontalCenter: parent.horizontalCenter
width: spacedWidth
height: spacedWidth / imageListModel.getImageWToHRatio()
border.color: "black"
border.width: indImageBorderWidth
radius: indImageRadius
Image {
id: image
source: "image://lmImageProvider/" + rowIndex + "_" + index
anchors.fill: parent
anchors.margins: imageRect.border.width - 2
cache: false
visible: false
property bool reload: reloadImageRole
onReloadChanged: {
source = ""
source = "image://lmImageProvider/" + rowIndex + "_" + index
}
}
Rectangle{
id: maskRect
anchors.fill: image
radius: indImageRadius - 3
visible: false
z: image.z + 1
}
OpacityMask {
anchors.fill: image
source: image
maskSource: maskRect
}
MouseArea {
anchors.fill: parent
onClicked: {
//imageListModel.toggleSelected(rowIndex + "_" + index)
console.log("Image Clicked: " + rowIndex + "_" + index)
}
}
}