我有一个应用程序可以获取并保存打开窗口的图片。不幸的是,当图像和窗口的尺寸匹配时,图像质量低得令人无法接受。我已经增加了RenderTargetBitmap的大小,这增加了图像质量,但是,现在生成的图像的尺寸对我来说太大了。
我的问题是:有没有办法将生成的RenderTargetBitmap调整为窗口的原始尺寸?是否可以在没有相应的图像质量损失的情况下做到这一点?这是我现在的代码。
List<Character> chars = new ArrayList<Character>();
for (int i = 0; i < toCompress.length(); i++) {
chars.add(toCompress.charAt(i));
}
List<String> bits = new ArrayList<String>();
for (int i = 0; i < chars.size(); i++) {
char toMatch = chars.get(i);
int matching = 1;
for (int dontuse = i; dontuse < chars.size(); dontuse++) {
int x = dontuse + 1;
if (x >= chars.size()) {
continue;
}
if (chars.get(x) == toMatch && (x - 1 == matching)) {
matching++;
}
}
if (!bits.contains(toMatch + "" + matching)) {
bits.add(toMatch + "" + (matching + 1));
i = i + matching;
}
}
String compressed = "";
for (int y = 0; y < bits.size(); y++) {
if (y == (bits.size() - 1)) {
compressed += bits.get(y);
} else {
compressed += bits.get(y) + "-";
}
}
return compressed;
提前感谢您的帮助。
答案 0 :(得分:0)
要调整大小,您可以执行以下操作:
var resized = new TransformedBitmap(bmp,
new ScaleTransform(newWidth / bmp.PixelWidth, newHeight / bmp.PixelHeight));
您还可以尝试缩放尺寸和dpi,如下所示:
public static RenderTargetBitmap RenderBitmap(FrameworkElement visualToRender, double scale) {
RenderTargetBitmap bmp = new RenderTargetBitmap
(
(int) (scale*(visualToRender.ActualWidth + 1)),
(int) (scale*(visualToRender.ActualHeight + 1)),
scale*96,
scale*96,
PixelFormats.Pbgra32
);
bmp.Render(visualToRender);
return bmp;
}
已更新以回答您的评论。所以我想你需要将结果保存在某个地方,可能是jpeg或png。 RenderTargetBitmap和TransformedBitmap都继承自BitmapSource,因此您可以像这样对图像进行编码:
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (Stream s = File.Create("test.png")) {
encoder.Save(s);
}
这里&#34; bmp&#34;可以是RenderTargetBitmap和TrasnformedBitmap