快速提问:
我有 1000 x 1000 位图图片:
我使用此例程加载它:
private BitmapSource initialBitmap = new BitmapImage(new Uri("C:\\Users\\...\\Desktop\\Original.bmp"));
为什么在我加载之后,在我跨过上面一行后,我将其视为 800 x 800 ?
P.S我希望它是1000 x 1000并且不使用任何Resize功能。它正在工作,突然它是800 * 800!
答案 0 :(得分:4)
BitmapSource.Width
和BitmapSource.Height
返回的值不是像素,而是WPF的设备无关单位,总是96 dpi。 E.g:
以与设备无关的单位(每单位1/96英寸)获取位图的宽度。
如果您想知道实际的像素宽度和高度,则需要使用PixelWidth
和PixelHeight
属性。
你的问题不是很具体,但如果你真正关心的是将位图显示的大小与创作的大小相同,那么最简单的解决方案就是确保以96 dpi的速度创作。无论您使用什么程序来创作位图,都可以在其中设置位图分辨率。通常,这可以在改变或不改变图像的像素尺寸的情况下设置(即,将图像缩放得更大或更小);你想在不缩放图像的情况下做到这一点,这样像素尺寸保持不变,但dpi会改变以匹配WPF正在使用的内容。
请注意,这仍然不能保证特定像素大小的位图显示。显示分辨率可以且通常不同于96 dpi,在这种情况下,WPF将缩放图像以确保图像的物理尺寸(即以英寸,毫米等为单位的尺寸)根据位图中的信息是正确的。例如,96 dpi时960像素宽意味着10“宽。在120 dpi显示器上,这意味着显示足够大的位图,使其宽度使用1200个显示像素。
如果您希望或需要位图以完全相同数量的显示像素显示,而不管显示分辨率如何,那么您必须设置一个转换,您可以在其中显示图像以反转WPF将缩放的效果否则呢。当然,这需要知道显示分辨率。
以下是一些您可能会觉得有用的其他相关Stack Overflow问题:
RenderTargetBitmap renders image of a wrong size
WPF for LCD screen Full HD
Screen Resolution Problem In WPF?
答案 1 :(得分:3)
这是设计的。请注意 try {
URL url = new URL(urlString);
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestProperty("Accept", "application/json");
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.setRequestMethod("POST");
String userCredentials = "xxxxxxxx"; //TOKEN
String basicAuth = "Basic " + Base64.encodeToString((userCredentials).getBytes(), Base64.DEFAULT);
urlConnection.setRequestProperty ("Authorization", basicAuth);
JSONObject jsonObject = new JSONObject();
jsonObject.put("account_id", params[1]);
jsonObject.put("method", params[2]);
jsonObject.put("test", params[3]);
jsonObject.put("data[number]", params[4]);
jsonObject.put("data[verification_value]", params[5]);
jsonObject.put("data[first_name]", params[6]);
jsonObject.put("data[last_name]", params[7]);
jsonObject.put("data[month]", params[8]);
jsonObject.put("data[year]", params[9]);
OutputStreamWriter os= new OutputStreamWriter(urlConnection.getOutputStream());
os.write(jsonObject.toString());
os.flush();
int responseCode = urlConnection.getResponseCode();
Log.d(TAG, "IUGU responsecode " + responseCode);
StringBuilder responseStrBuilder = new StringBuilder();
BufferedReader reader = new BufferedReader( new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
String inputStr = null;
while ((inputStr = reader.readLine()) != null)
responseStrBuilder.append(inputStr);
InJsonObject = new JSONObject(responseStrBuilder.toString());
id = InJsonObject.get("id").toString();
Log.d(TAG, "IUGU id " + id);
os.close();
的{{3}}:
以与设备无关的单位(1/96英寸)获取位图的宽度 每单位)。 (重写ImageSource.Width。)
相反,您应该使用BitmapSource.Width/Height
/ PixelWidth
属性:
以像素为单位获取位图的宽度。
一个相当令人困惑的选择或条款,imo,但你去了..