如何在Android上绘制完整的800乘480图像

wgx48brx  于 2022-12-28  发布在  Android
关注(0)|答案(2)|浏览(153)

我有一张800x300的图片,我知道这是我的测试平台分辨率的宽度(HTC Desire的分辨率是800x480)。当我试图把这张图片画到屏幕上时,它的比例很奇怪。它溢出了屏幕的左手边,几乎填满了所有的垂直部分。
我使用的代码如下:

canvas.drawBitmap( screen[1], new Rect(0,0,800,300), new Rect(0,0,800,300), null);

因为某些原因

width_x = canvas.getWidth();

width_y = canvas.getHeight();

报告我的分辨率为533x320。现在我假设这是Android使用的 * expletive-deleted * 迷人的缩放系统,因此应用程序在所有手机上显示相同的大小,但我想忽略这一点。我正在编写一个游戏,所以想处理缩放和定位自己-例如使用更多的屏幕资产,如果它变得可用。最佳Android实践可能适合基于图标的应用程序,但我想画到绝对像素位置,并获得屏幕的绝对分辨率信息。
因此我的问题是-这是绝对不可能的吗?如果它是完全禁忌的,因为Android有一个简单有效的系统来做这件事,那么我会有兴趣知道它是什么。dpi与我的游戏设计无关(就像如果这是一个PC游戏,它将是无关的)
也许我的屏幕实际上是533乘320,除非我以某种方式指定分辨率?我尝试使用宽度和高度的缩放值,图像在屏幕上的大小大致正确,但由于发生了某种缩放,图像边缘参差不齐。因此,我无法访问屏幕能够显示的所有像素。
为了放大它我用了

canvas.drawBitmap( screen[1], new Rect(0,0,800,300), new Rect((int)(0.0f),(int)(0.0f),(int)(533.0f),(int)(187.5f)), null); // numbers

刚被打进去测试-比率相当于报告的屏幕分辨率。看起来很可怕。

laximzn5

laximzn51#

Android并没有做任何事情来扰乱你的感知分辨率--你在那个欲望上使用的是800 x480像素。
您是否正在全屏、自定义视图中工作并覆盖onDraw?您是否正在使用SurfaceView?在帮助您解决问题之前,我们需要了解这些信息。
假设您正在执行上述操作,您应该能够使用Canvas.drawBitmap(Bitmap bitmap,float left,float top,Paint paint)将位图绘制到屏幕上,而无需任何缩放。在您的情况下,将其放置在画布的左上角时,它看起来像canvas.drawBitmap( screen[1], 0.0f, 0.0f, null);
在性能敏感型应用(如游戏)中,您不希望在绘制循环期间使用drawBitmap()的源/目标Rect版本,因为它会在循环的每次迭代期间进行缩放。相反,您可以将原始位图的缩放/裁剪版本绘制到另一个成员位图,然后使用上面链接的drawBitmap的x/y偏移版本在循环中绘制该成员位图。
如果您想知道您正在使用的屏幕真实的空间的大小(如果您正在进行任何自定义绘制,您肯定应该知道),您将需要覆盖onSizeChanged()或surfaceChanged(),具体取决于实现。
你真的应该去看看API demos,那里有一些很好的例子来说明如何做你想做的事情。
祝你好运!

k5ifujac

k5ifujac2#

我修复了我的一个问题-在清单文件中,我的目标操作系统设置不正确-将其切换到4(例如1.6)似乎修正了我得到的高度和宽度的值,至少对于HTC来说是这样。模拟器的问题更大,但至少它是朝着正确方向迈出的重要一步。告诉你,我正在全屏,横向模式下工作(已修复),几乎所有功能都有覆盖函数(包括onDraw、surfaceChanged等)
如果我能得到绝对宽度和高度,我就可以编写自己的代码来加载正确的资产,并使用正确的缩放比例来定位屏幕- DPI不是一个问题,所以希望不会偏离建议的准则太远。

相关问题