我在磁盘上有一个图像文件,我正在调整文件大小并将其作为新的图像文件保存回磁盘.为了这个问题,我没有将它们带入内存以便在屏幕上显示它们,只是为了调整它们并重新保存它们.这一切都很好.但是,缩放后的图像上有如下所示的工件:android:运行时调整大小的图像质量
它们会因为这种失真而被保存,因为我可以将它们从磁盘上取下并在计算机上查看它们,但它们仍然存在同样的问题.
在将图像加载到Bitmap对象以将位图解码到内存时,我使用类似于此奇怪的内存不足问题的代码:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imageFilePathString, options);
int srcWidth = options.outWidth;
int srcHeight = options.outHeight;
int scale = 1;
while(srcWidth / 2 > desiredWidth){
srcWidth /= 2;
srcHeight /= 2;
scale *= 2;
}
options.inJustDecodeBounds = false;
options.inDither = false;
options.inSampleSize = scale;
Bitmap sampledSrcBitmap = BitmapFactory.decodeFile(imageFilePathString, options);
Run Code Online (Sandbox Code Playgroud)
然后我正在进行实际缩放:
Bitmap scaledBitmap = Bitmap.createScaledBitmap(sampledSrcBitmap, desiredWidth, desiredHeight, false);
Run Code Online (Sandbox Code Playgroud)
最后,新调整大小的图像将保存到磁盘:
FileOutputStream out = new FileOutputStream(newFilePathString);
scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
Run Code Online (Sandbox Code Playgroud)
然后,正如我所提到的,如果我将该文件从磁盘中拉出来并查看它,它就会将质量问题链接到上面并且看起来很糟糕.如果我跳过createScaledBitmap并将samplesSrcBitmap直接保存回磁盘就没有问题,似乎只有在大小改变时才会发生.
我已经尝试过,正如您在代码中看到的那样,设置inDither为false,如http://groups.google.com/group/android-developers/browse_thread/thread/8b1abdbe881f9f71所述,并在上面的第一个链接帖子中提到.这并没有改变任何事情.另外,在我链接的第一篇文章中,罗曼盖伊说:
不要在绘图时调整大小(这将是非常昂贵的),尝试在屏幕外位图中调整大小并确保位图为32位(ARGB888). …
我有这个select元素与option它不同.通常select元素会从最大option元素获得宽度,但我希望select元素的默认option值宽度更短.当用户选择另一个元素时option,该select元素应调整自身大小,以便整个文本始终在元素中可见.
$(document).ready(function() {
$('select').change(function(){
$(this).width($('select option:selected').width());
});
});
Run Code Online (Sandbox Code Playgroud)
问题:
有没有办法让drag'n'drop可以调整<div>容器的大小?这样用户可以使用拖放来改变它的大小?
真的很感激任何帮助!
我正在尝试创建一种方法来调整多行文本的大小TextView,使其适合于(在X和Y维度)的范围内TextView.
目前,我有一些东西,但它所做的只是调整文本大小,使文本的第一个字母/字符填充尺寸TextView(即只有第一个字母是可见的,而且它是巨大的).我需要它来适应TextView边界内的所有文本行.
这是我到目前为止:
public static void autoScaleTextViewTextToHeight(TextView tv)
{
final float initSize = tv.getTextSize();
//get the width of the view's back image (unscaled)....
float minViewHeight;
if(tv.getBackground()!=null)
{
minViewHeight = tv.getBackground().getIntrinsicHeight();
}
else
{
minViewHeight = 10f;//some min.
}
final float maxViewHeight = tv.getHeight() - (tv.getPaddingBottom()+tv.getPaddingTop())-12;// -12 just to be sure
final String s = tv.getText().toString();
//System.out.println(""+tv.getPaddingTop()+"/"+tv.getPaddingBottom());
if(minViewHeight >0 && maxViewHeight >2)
{
Rect currentBounds = new Rect();
tv.getPaint().getTextBounds(s, 0, s.length(), currentBounds);
//System.out.println(""+initSize);
//System.out.println(""+maxViewHeight);
//System.out.println(""+(currentBounds.height())); …Run Code Online (Sandbox Code Playgroud) 不久前,我能够在Android上调整屏幕大小.例如,我有一个Xoom,并且能够从ADB运行一个命令,将它缩小到一个7英寸的屏幕(在它周围留下一个黑色边框).当然,这是一个小小的车,因为家/后/应用程序 - 切换按钮消失了,但我知道这是可能的.这是一个1行命令,我在X和Y像素中为Xoom输入新的屏幕分辨率.
我想知道是否有人熟悉这一点,并知道如何做到这一点.
(如果有人说这是不可能的,我可以向你保证)
(我想这样做,所以我可以在我的Nexus 10上测试各种屏幕尺寸的应用程序,我不想使用模拟器)
有没有人有秘密配方来调整透明图像(主要是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) 我刚刚开始研究一个新的C++/Qt项目.它将是一个基于MDI的IDE,带有停靠的小部件,用于文件树,对象浏览器,编译器输出等等.但是到目前为止,有一件事让我烦恼:我无法弄清楚如何以编程方式QDockWidget缩小.例如,此代码段创建了我的底部停靠窗口"构建信息":
m_compilerOutput = new QTextEdit;
m_compilerOutput->setReadOnly(true);
dock = new QDockWidget(tr("Build Information"), this);
dock->setWidget(m_compilerOutput);
addDockWidget(Qt::BottomDockWidgetArea, dock);
Run Code Online (Sandbox Code Playgroud)
启动时,我的程序看起来像这样(记住开发的早期阶段):

但是,我希望它看起来像这样:

我似乎无法实现这一点.QDockWidget上的Qt参考说明了这一点:
应在子窗口小部件中实现自定义大小提示,最小和最大大小和大小策略.QDockWidget将尊重它们,调整自己的约束以包含框架和标题.不应在QDockWidget本身上设置大小约束,因为它们会根据是否停靠而更改
现在,这表明执行此操作的一种方法是子类QTextEdit并覆盖该sizeHint()方法.但是,我不想仅仅为此目的这样做,我也没有尝试过它来找到一个有效的解决方案.
我试过打电话dock->resize(m_compilerOutput->width(), m_compilerOutput->minimumHeight()),m_compilerOutput->setSizePolicy()用它的每个选项打电话......到目前为止,没有任何东西影响了它的大小.就像我说的,我更喜欢在几行代码中使用一个简单的解决方案来创建一个只是为了改变的子类sizeHint().所有建议表示赞赏.
我在Python工作,我有一个像这样的NumPy数组:
[1,5,9]
[2,7,3]
[8,4,6]
Run Code Online (Sandbox Code Playgroud)
如何将其拉伸到类似下面的内容?
[1,1,5,5,9,9]
[1,1,5,5,9,9]
[2,2,7,7,3,3]
[2,2,7,7,3,3]
[8,8,4,4,6,6]
[8,8,4,4,6,6]
Run Code Online (Sandbox Code Playgroud)
这些只是一些示例数组,我实际上将调整几个大小的数组,而不仅仅是这些.
我是新手,我似乎无法绕过我需要做的事情.
例如ListView,我不能让我的元素正确调整大小.
我有一个ListActivity搜索,一个仪表板,一个编辑框和一个列表视图.想法是在键盘显示时隐藏操作栏.
我扩展了LinearLayout,听取视图大小的变化(这里推荐):
public class SizeChangingLinearLayout extends LinearLayout {
//...
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld)
{
View actionbar = mainView.findViewById(R.id.actionbar);
if (yNew > yOld)
actionbar.setVisibility(View.VISIBLE);
else if (yNew < yOld)
actionbar.setVisibility(View.GONE);
super.onSizeChanged(xNew, yNew, xOld, yOld);
}
}
Run Code Online (Sandbox Code Playgroud)
操作栏的隐藏/显示按预期工作,但ListView在隐藏操作栏的高度下方有一个间隙.一旦任何图形改变(例如在编辑框中书写),ListView填补空白.隐藏键盘时,反向出现类似的行为.

[编辑]
更改其他布局时也会出现同样的问题.直接更改节目中的内容,但Visibility在onSizeChanged其他一些用户操作重新绘制这些视图之前,不会显示更改大小和边距.无效无效onSizeChanged.
[/编辑]
我试图通过以下方式刷新图形:
invalidate-ing无论是定制的LinearLayout和ListView (推荐这里)notifyDataSetChanged 在列表的适配器上forceLayout......还有更多,没有成功.为什么一开始ListView不调整大小?我是否必须onLayout在扩展的LinearLayout中覆盖?我错过了什么?
我正在编写一个程序,用户应该能够在文本框中编写文本.我希望文本框能够自行调整大小,因此它适合内容.我尝试过以下方法:
private void textBoxTitle_TextChanged(object sender, TextChangedEventArgs e)
{
System.Drawing.Font myFont = new System.Drawing.Font("Verdana", 8);
System.Drawing.SizeF mySize = e.Graphics.MeasureString("This is a test", myFont);
this.textBoxTitle.Width = (int)Math.Round(mySize.Width, 0);
}
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,说Graphics不适用于TextChangedEventArgs.还有另一种方法可以调整文本框的大小吗?