我正在处理一些图像处理任务。
我使用getDrawingCache()
和createScalledBitmap()
但是当我将此图像调整为高分辨率时,请说612 X 612我的图像变得模糊。它看起来很糟糕。
有没有办法在不丢失像素的情况下将图像调整为高分辨率? openCV有这种类吗?
答案 0 :(得分:5)
你做不到。如果您的图像是200x200,那么它包含的信息像素数。如果你扩展它,它仍然是相同数量的信息,只有你必须将它传播到更广泛的区域。
可以这样想 - 比如说你的图像是一个像素,而像素是蓝色的。现在,您希望将该图像缩放到两个像素。第二个像素应该是什么颜色?答:它可以是任何东西。第一个像素中没有信息可以权威地决定第二个像素应该是什么样子,没有可用的信息。
所以,这不是你所说的“丢失像素”的问题,而是添加新像素而没有关于它们应该是什么样的信息的问题。因此,调整大小使用它所具有的信息,其基本上是“使插入/新像素与最近的相邻预先存在的像素相同的颜色”。
有插值(猜测)插入像素应该是什么样的算法和技术,以避免锯齿状边缘等。维基百科在各种interpolation-based scaling techniques和supersampling上有一些很好的信息作为起点。请注意,虽然这些技术都没有创建新信息,但它们只会平滑边缘并使缩放后的图像看起来不那么锯齿。
答案 1 :(得分:1)
您应该做的是创建尺寸为612 X 612的原始图像,然后缩小尺寸并将其保存为其他内容,这样您就可以拥有原始的大图像和小图像。从大到小的图像很容易从小到大。
答案 2 :(得分:1)
我已经使用资产解决了这个问题。
(1)将我的所有图像放入资产文件夹
(2)使用输入流
读取图像现在我不需要调整它,它可以正常工作。像这样:
private void setThemeBackgroundImage(String imageName, Button themeButton) {
try {
InputStream backgroundBitmap = getAssets().open(imageName);
Bitmap immutableBitmap = BitmapFactory
.decodeStream(backgroundBitmap);
themeButton.setBackgroundDrawable(new BitmapDrawable(
getResources(), immutableBitmap));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}