android - 无法对具有不同高度和宽度的位图进行样式化
问题描述
我在代码实验室中使用 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
相同(方形图像),上述代码可以正常工作。如果尺寸不同(矩形图像),则输出图像与预期不符,并且某些图案会重复,如下所示。
任何帮助将不胜感激。谢谢。
解决方案
您是否尝试过 getScaleType() 来返回图像缩放类型? https://developer.android.com/reference/android/widget/ImageView
推荐阅读
- python - 在odoo v10中创建新员工时如何发送特定组的通知?
- gif - 是否可以将抽奖动画转换为 GIF?
- go - 在 Go 中将 *_Ctype_float 转换为 float32
- wso2-am - WSO2 AM 部署错误 java.net.NoRouteToHostException: No route to host (Host unreachable) on Centos7 Server
- android - 创建没有 hittest 或 trackables 的锚点发生致命错误
- c++ - 数据在内存中丢失c ++
- java - 抽屉项目中的导航抽屉活动设置点击事件
- c++ - 对“列表”的引用不明确,包括头文件
- html - 添加 FORM 标记后 Html 元素缩小
- reactjs - reactjs 使用 redux 和 thunks 调度不起作用