有没有人有秘密配方来调整透明图像(主要是GIF)的大小而没有任何质量损失 - 这是怎么回事?
我尝试了很多东西,我得到的最接近的东西还不够好.
看看我的主要形象:
http://www.thewallcompany.dk/test/main.gif
然后缩放图像:
http://www.thewallcompany.dk/test/ScaledImage.gif
//Internal resize for indexed colored images
void IndexedRezise(int xSize, int ySize)
{
BitmapData sourceData;
BitmapData targetData;
AdjustSizes(ref xSize, ref ySize);
scaledBitmap = new Bitmap(xSize, ySize, bitmap.PixelFormat);
scaledBitmap.Palette = bitmap.Palette;
sourceData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly, bitmap.PixelFormat);
try
{
targetData = scaledBitmap.LockBits(new Rectangle(0, 0, xSize, ySize),
ImageLockMode.WriteOnly, scaledBitmap.PixelFormat);
try
{
xFactor = (Double)bitmap.Width / (Double)scaledBitmap.Width;
yFactor = (Double)bitmap.Height / (Double)scaledBitmap.Height;
sourceStride = sourceData.Stride;
sourceScan0 = sourceData.Scan0;
int targetStride = …Run Code Online (Sandbox Code Playgroud) 我对图像缩放算法感兴趣,并实现了双线性和双三次方法.但是,我听说过lanczos和其他更复杂的方法可以实现更高质量的图像缩放,我很好奇它们是如何工作的.
有人可以在这里解释使用lanczos(放大和缩小)缩放图像背后的基本思想以及为什么它会带来更高的质量?
我确实有傅里叶分析的背景,过去曾做过一些信号处理工作,但与图像处理无关,所以不要害怕使用像"频率响应"这样的术语,如你的答案:)
编辑:我想我真正想知道的是使用卷积滤波器进行插值的概念和理论.
(注意:我已经阅读了有关lanczos重采样的维基百科文章,但它没有足够的细节供我使用)
非常感谢!
我在C#中出现图像缩放问题.
我有一个给定尺寸的图片框:例如宽度= 800px高度= 600px
我正在将不同的图像加载到该图片框中,小图片(400x400)和大图片(800 + x 600+)
如果他们的图片不适合盒子,我的图片会被调整大小.但它们总是调整为PictureBox的MAX宽度和高度.所以纵横比被破坏了.
任何人都可以帮助识别/解决问题吗?
类别:
ImageHandling.cs(已注释掉)
例子:
问题1:我的版本
vs原始来源 
问题2:
我的版本

vs原始来源

我多么想要:
解

改变的大小的图像在GWT部件改变所述图像元素的大小,但不重新调整屏幕上的图像.因此,以下方法不起作用:
Image image = new Image(myImageResource);
image.setHeight(newHeight);
image.setWidth(newWidth);
image.setPixelSize(newWidth, newHeight);
Run Code Online (Sandbox Code Playgroud)
这是因为GWT 通过使用CSS 将HTML 元素设置为图像来实现其Image小部件.background-image<img... />
如何让实际图像调整大小?
任务: 我有一些图像,我缩小它们,并将它们连接到一个图像.但是我对实现有一点问题:
具体问题: 我想调整大小/缩放BufferedImage.getScaledInstance方法返回一个Image对象,但我无法将其强制转换为BufferedImage:
Exception in thread "main" java.lang.ClassCastException: sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage
Run Code Online (Sandbox Code Playgroud)
(我不知道为什么它是ToolkitImage而不是Image ...)
我找到了解决方案:
Image tmp = bi.getScaledInstance(SMALL_SIZE, SMALL_SIZE, BufferedImage.SCALE_FAST);
BufferedImage buffered = new BufferedImage(SMALL_SIZE,SMALL_SIZE,BufferedImage.TYPE_INT_RGB);
buffered.getGraphics().drawImage(tmp, 0, 0, null);
Run Code Online (Sandbox Code Playgroud)
但它很慢,我认为应该有更好的方法来做到这一点.
我需要BufferedImage,因为我必须让像素加入小图像.
有更好的(更好/更快)的方式吗?
编辑: 如果我首先将Image转换为ToolkitImage,它有一个getBufferedImage()方法.但它总是返回null.你知道为什么吗?
我有模式,每个模式都有一个图像.我需要将图像缩放到容器的整个宽度或高度,这些容器是路径,同时保留它们的比例.从本质上讲,如果你设置,他们需要表现得像一个HTML图像min-width:100%; min-height:100%;
我以前没有使用过很多svgs,也不知道要改变哪些属性来获得这种行为.我一直在尝试各种组合viewBox,preserveAspectRatio,patternUnits和更多,但我似乎无法得到我想要的东西.
我想在GitHub上的README.md中缩小我的一些图像,并且在我的Markdown编辑器中使用类似的东西工作正常

Run Code Online (Sandbox Code Playgroud)
但是,当我将它上传到GitHub时,Markdown查看器似乎不喜欢它.任何建议或想法如何在不降低图像分辨率的情况下缩小图像尺寸?
我正在编写一些代码来缩放C/C++中的32位RGBA图像.我已经写过一些有些成功的尝试,但它们很慢,最重要的是尺寸图像的质量是不可接受的.
我比较了由OpenGL(即我的视频卡)和我的例程缩放的相同图像,它的质量相差几英里.我已经搜索了Google代码,搜索了我认为可以解决一些问题的源代码树(SDL,Allegro,wxWidgets,CxImage,GD,ImageMagick等),但通常他们的代码要么是错综复杂的,要么分散在各处或者是谜语汇编程序,很少或没有评论.我还阅读了维基百科和其他地方的多篇文章,我只是没有找到我需要的明确解释.我理解插值和采样的基本概念,但我很难让算法正确.我不想依赖外部库来完成一个例程,并且必须转换为它们的图像格式并返回.此外,无论如何,我想知道如何自己做.:)
我之前看过一个关于堆栈溢出问题的类似问题,但它并没有真正以这种方式回答,但我希望有人可以帮我推动我朝着正确的方向前进.也许指点我一些文章或伪代码......任何可以帮助我学习和做的事情.
这是我正在寻找的:
我的例程基本上采用以下形式:
DrawScaled(uint32 *src, uint32 *dst,
src_x, src_y, src_w, src_h,
dst_x, dst_y, dst_w, dst_h );
Run Code Online (Sandbox Code Playgroud)
谢谢!
更新:为了澄清,我需要一些比盒子重新采样更先进的东西用于降尺度,这会使图像模糊不清.我怀疑我想要的是某种双三次(或其他)滤波器,它与双三次升频算法有些相反(即每个目标像素都是从所有贡献的源像素计算出来的,并结合了保持锐利的加权算法.
这是我从wxWidgets BoxResample算法得到的例子与我想要的256x256位图缩放到55x55的例子.
最后:
原始的256x256图像
我正在尝试仅使用glTexCoord2f()和glVertex2f()实现OpenGL中的图像缩放.
让我解释一下:在加载a QImage并将其发送到gpu后,glTexImage2D()我必须根据Qt的规范执行图像缩放操作.Qt定义了这3个操作(见下图):

我认为这是唯一的方法,因为我的应用程序是一个Qt插件,这个任务需要paint()在类的方法内完成.这项IgnoreAspectRatio操作非常简单,现在正在运作.在KeepAspectRatio最初给了我一些麻烦,但现在它也在努力.不幸的是,KeepAspectRatioByExpanding让我很头疼.
我正在分享到目前为止我所做的事情,感谢您对此问题的帮助:
main.cpp中:
#include "oglWindow.h"
#include <QtGui/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
oglWindow w;
w.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
oglWindow.cpp:
#include "oglWindow.h"
#include "glwidget.h"
#include <QGridLayout>
oglWindow::oglWindow(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
GLWidget *openGL = new GLWidget(this);
QGridLayout *layout = new QGridLayout;
setLayout(layout);
}
oglWindow::~oglWindow()
{
}
Run Code Online (Sandbox Code Playgroud)
oglWindow.h:
#ifndef oglWindow_H …Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi 2009,我想缩放图像以适应可用空间.图像始终显示小于原始图像.问题是TImage Stretch属性做得不好,损害了图片的可读性.
丑陋的方式http://xrw.bc.ca/download/so/TImageStretch.gif
我希望看到它像这样缩放:
更好的方式http://xrw.bc.ca/download/so/NicerTImageStretch.png
有什么建议如何最好地做到这一点?试过JVCL,但它似乎没有这种能力.一个免费的图书馆会很好,但也许有一个低成本的图书馆,"只"这也很好.