预览窗格中照片的纵横比,其中高度恒定且仅宽度变化
Posted
技术标签:
【中文标题】预览窗格中照片的纵横比,其中高度恒定且仅宽度变化【英文标题】:aspect ratio of photo in preview pane where height is constant and only width varies 【发布时间】:2013-07-19 09:18:46 【问题描述】:我在为图像创建 PREVIEW HANDlER 时遇到问题。问题是当我在预览窗格上有照片时,它不会自行调整大小以保持纵横比,所以我想编写一个代码,以便照片将自行调整大小以保持图像的纵横比。我还必须记住,当我使用我的算法调整图像大小时,它应该保持纵横比,并且图像应该在预览窗格中具有可能的最大尺寸(我的意思是不应该有任何其他可能有图像的算法比我们的算法获得的图像更大尺寸的预览,同时保持纵横比)。
我们必须记住,预览窗格的高度是一个常数因子,所以我们只需要处理变化的宽度(我的意思是根据变化的宽度,我们必须保持高度和宽度的纵横比图片)。 任何帮助正在开发算法表示赞赏。
【问题讨论】:
你实际需要什么样的算法?我很难理解哪些是不变的,哪些可能会有所不同.. 如果您在预览窗格中看到任何图像(在 window exprlorer 中),并且当您调整预览窗格的大小时,您会观察到该图像根据预览窗格调整自身大小并保持纵横比。所以我为任何文件创建了一个图像(我的意思是当我单击该文件时,我在预览窗格上有一个图像,但该图像不保持纵横比。纵横比是指 WidthOfImage/HeightOfImage 必须保持不变。跨度> 图像应该以这样的方式调整大小,如果这个比率当前是 16/4,那么在减少它必须是 8/2)这里我们必须处理 HeightOfImage 和 WidthOfImage 以及 WidthOfPreviewPane 和 HeightOfPreviewPane(您可以在窗口资源管理器中看到它在预览窗格的情况下保持不变..当您调整图像大小时,仅 widthOfPreview 窗格更改而不是高度)..您现在有问题吗?? 【参考方案1】:我先明确定义这两个比率。
ImageRatio = WidthOfImage / HeightOfImage
和
WindowRatio = WidthOfPreviewPane / HeightOfPreviewPane
.
其次,您可以再次尝试使用 Windows 资源管理器。当WindowRatio
小于ImageRatio
并且垂直拖动窗格时,预览窗格的高度也会发生变化。
最后,你可能会得到ActualWidthOfImage
和ActualHeightOfImage
如下:
if (WindowRatio > ImageRatio)
ActualHeightOfImage = HeightOfPreviewPane;
ActualWidthOfImage = ActualHeightOfImage * ImageRatio;
else
ActualWidthOfImage = WidthOfPreviewPane;
ActualHeightOfImage = ActualWidthOfImage / ImageRatio;
我是否正确理解了您的问题?如果您还有其他问题,我愿意为您提供帮助。
【讨论】:
您的想法是绝对正确的,由此获得的图像将保持纵横比,并且还将适应不同预览窗格内的最大尺寸,但我想要的是图像应该是原始尺寸,直到 WidthOfPreviewPane =WidthOfImage 并且它应该在 WidthOfImage>WidthOfPreviewPane 的条件之后减小大小 (我的意思是在这种情况下,我们已经减少了预览窗格的宽度,然后是 WidthOfImage (它应该开始挤压这里。)根据你的算法会发生什么会是这样 - 假设你已经打开预览窗格和当前的 WidthOfPreviewPane>WidthOfImage ..这里你的算法正在显示非常大尺寸的图像(尺寸被缩放)但是不......我只想要尺寸挤压(当图像尺寸>预览窗格宽度时)不缩放。我是什么确切想要的是图像应该是原始大小的大小 直到条件是 WidthOfPreviewPane>WidthOfImage 并且当 WidthOfPreviewPane 您可以扩展我的代码,当 WidthOfPreviewPane > WidthOfImage 和 HeightOfPreviewPane > HeightOfImage 同时保持时,您可能什么也不做。只需将您的图像以原始尺寸放在中心即可。如果任何条件不成立,您就开始缩放。 @ShekharSinghSHEKHAWAT 我的解决方案适用于您提到的两种情况。唯一的区别是ImageRatio < 1
当HeightOfImage > WidthOfImage
,但这不会影响我的解决方案的正确性。你可以举个例子试试。以上是关于预览窗格中照片的纵横比,其中高度恒定且仅宽度变化的主要内容,如果未能解决你的问题,请参考以下文章
如何在FFMpeg中连接两个或多个具有相同宽度和不同高度的视频并保持相同的纵横比?