我正在使用Google在代码实验室中提供的Tensorflow模型之一在图像上应用艺术风格。
我正在使用以下代码来应用样式:
private fun stylizeImage(bitmap: Bitmap) {
val intValues = IntArray(desiredWidth * desiredHeight)
val floatValues = FloatArray(desiredWidth * desiredHeight* 3)
bitmap.getPixels(intValues, 0, bitmap.width, 0, 0, bitmap.width, bitmap.height)
for (i in 0 until intValues.size) {
val value = intValues[i]
floatValues[i * 3] = ((value shr 16) and 0xFF) / 255.0f
floatValues[i * 3 + 1] = ((value shr 8) and 0xFF) / 255.0f
floatValues[i * 3 + 2] = (value and 0xFF) / 255.0f
}
// Copy the input data into TensorFlow.
inferenceInterface.feed(INPUT_NODE, floatValues, 1, bitmap.width.toLong(), bitmap.height.toLong(), 3)
inferenceInterface.feed(STYLE_NODE, styleVals, NUM_STYLES.toLong())
// Execute the output node's dependency sub-graph.
inferenceInterface.run(arrayOf(OUTPUT_NODE), false)
// Copy the data from TensorFlow back into our array.
inferenceInterface.fetch(OUTPUT_NODE, floatValues)
for (i in 0 until intValues.size) {
intValues[i] = (0xFF000000.toInt()
or ((floatValues[i * 3] * 255).toInt() shl 16)
or ((floatValues[i * 3 + 1] * 255).toInt() shl 8)
or (floatValues[i * 3 + 2] * 255).toInt())
}
val newBm = Bitmap.createBitmap(intValues, bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
imageView.setImageBitmap(newBm)
}
问题是,如果desiredWidth
和desiredHeight
的尺寸相同(正方形图像),则上面的代码可以正常工作。如果尺寸不同(矩形图像),则输出图像不符合预期,并且某些图案会重复显示,如下所示。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
您是否尝试过getScaleType()返回图像缩放类型? https://developer.android.com/reference/android/widget/ImageView