小编Ste*_*e K的帖子

Image.Save()用于jpeg文件的质量等级是多少?

当我加载一个jpg文件然后转过来并以100的质量保存它并且大小几乎是原始的4倍时,我才真正感到惊讶.为了进一步研究我打开并保存而没有明确设置质量和文件大小完全相同.我认为这是因为没有改变所以它只是将完全相同的位写回文件.为了测试这个假设,我在图像上对角线画了一条大胖线并再次保存而没有设置质量(这次我希望文件跳起来因为它会"脏")但它减少了~10Kb!

此时我真的不明白当我简单地调用Image.Save()时指出压缩质量时发生了什么.当我将质量设置为100(基本上没有压缩)时文件大小比原始大几倍时,文件大小如何接近(在图像修改后)到原始大小时尚未设置质量?

我已经阅读了有关Image.Save()的文档,而且它缺乏关于幕后发生的事情的任何细节.我用谷歌搜索了我能想到的每一种方式,但我找不到任何可以解释我所看到的信息的其他信息.我已经连续工作了31个小时,所以也许我错过了一些明显的东西; 0)

所有这些都是在我实现一些库方法将图像保存到数据库时实现的.我已经重载了我们的"SaveImage"方法以允许明确地设置质量,并且在我的测试期间,我遇到了上面解释的奇怪(对我而言)的结果.任何你可以流下的光都将受到赞赏.

这里有一些代码可以说明我遇到的情况:

string filename = @"C:\temp\image testing\hh.jpg";
string destPath = @"C:\temp\image testing\";

using(Image image = Image.FromFile(filename))
{
    ImageCodecInfo codecInfo = ImageUtils.GetEncoderInfo(ImageFormat.Jpeg);

    //  Set the quality
    EncoderParameters parameters = new EncoderParameters(1);

    // Quality: 10
    parameters.Param[0] = new EncoderParameter(
        System.Drawing.Imaging.Encoder.Quality, 10L);
    image.Save(destPath + "10.jpg", codecInfo, parameters);

    // Quality: 75
    parameters.Param[0] = new EncoderParameter(
        System.Drawing.Imaging.Encoder.Quality, 75L);
    image.Save(destPath + "75.jpg", codecInfo, parameters);

    // Quality: 100
    parameters.Param[0] = new EncoderParameter(
        System.Drawing.Imaging.Encoder.Quality, 100L);
    image.Save(destPath + "100.jpg", codecInfo, parameters);

    //  default
    image.Save(destPath + …
Run Code Online (Sandbox Code Playgroud)

c# gdi+ system.drawing.imaging

33
推荐指数
2
解决办法
3万
查看次数

将等号('=')传递给MediaWiki模板中的参数

如何在不破坏模板解析器的情况下在模板参数中使用"="字符?我不是MediaWIKI开发人员所以我没有调试代码或检查日志,我希望有人在这里有一个提示转义传递给模板的字符.

使用以下内容创建名为"Test"的模板:

{{{1}}}
Run Code Online (Sandbox Code Playgroud)

像这样:

{{ Test | R = 3/(2-(1+1)) }} 
Run Code Online (Sandbox Code Playgroud)

将呈现{{{1}}}而不是复杂的公式!我已经确定'='字符是罪魁祸首.

mediawiki mediawiki-templates

18
推荐指数
3
解决办法
1927
查看次数

在javascript中将10提升到一个强大的力量,有没有比这更好的方法

我需要为特定功率创建一个整数值(这不是正确的术语,但基本上我需要创建10,100,1000等)."power"将被指定为函数参数.我提出了一个解决方案,但是MAN确实感到hacky和错误.我想学习更好的方法,如果有一个,也许一个不是基于字符串的?此外,eval()不是一个选项.

这是我现在所拥有的:

function makeMultiplierBase(precision)
{
    var numToParse = '1';
    for(var i = 0; i < precision; i++)
    {
        numToParse += '0';
    }

    return parseFloat(numToParse);
}
Run Code Online (Sandbox Code Playgroud)

我也想出了这个基于非字符串的解决方案,但由于循环仍然看起来很hacky:

function a(precision)
{
    var tmp = 10;
    for(var i = 1; i < precision; i++)
    {
        tmp *= 10;
    }

    return tmp;
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我需要这样做来创建一个使用货币的舍入方法.我一直在使用var formatted = Math.round(value*100)/ 100

但是这个代码出现在各处,我想要一个方法来处理特定精度的舍入,所以我创建了这个

if(!Math.roundToPrecision)
{
    Math.roundToPrecision = function(value, precision)
    {
        Guard.NotNull(value, 'value');

        b = Math.pow(10, precision);
        return Math.round(value * b) / b;
    }  
}
Run Code Online (Sandbox Code Playgroud)

我以为我会把它包含在这里,因为它已被证明是方便的.

javascript exponentiation

16
推荐指数
1
解决办法
2万
查看次数

如何隐藏Visio 2007的UML参数方向指示器("输入/输出")

我在Google上搜索并搜索了解决方案,我发现它只能覆盖文本并手动编辑它 - 但是只要您对对象进行更改,就会更改.

我想隐藏方法参数的"in"方向指示器 - 任何人都知道是否可以这样做,如果可以,怎么做?

uml visio

9
推荐指数
1
解决办法
2854
查看次数

在应用程序中使用DI与共享库

我正面临一个设计挑战,我似乎无法以令人满意的方式解决.我有一个包含所有共享ORM对象的类库程序集(使用EntitySpaces框架).这些对象用于两个或更多不同的应用程序,这就是它们在自己的程序集中的原因.这个设置对我来说已经工作了4年多了.

我还在Microsoft的模式与实践组(P&P)的复合应用程序块(CAB)上构建了一些应用程序.是的,我知道这已经很老了,但我是一名兼职开发人员,单人工作,不能更新到现有的框架.

这就是我的问题所在:我一直在运用我的OO设计技巧,每当进行大量重构时,我都试图从程序方法转向更多OO方法.当然,OO设计的一个主要方面是将操作放在它们使用的数据附近,这意味着我的ORM对象需要在适当的地方添加功能.当我考虑到我在CAB中使用P&P的Object Builder DI容器并且我将移动到我的ORM对象中的大部分功能需要访问我的应用程序公开的服务时,这证明是一个真正的头脑.

换句话说,假设我有一个名为"Person"的共享业务对象(原创,我知道),我有两个应用程序与一个人完全不同的事情.应用程序A提供了一组服务,Person对象需要具有DI,以便它能够采用当前遍布我的服务层的一些方法.应用程序B还有一组不同的服务,IT需要将这些服务用于人员对象.

考虑到P&P对象生成器如何使用属性修饰和类型反射来解析依赖关系,我不知道如何实现这一点.简而言之,我有一个共享对象,当在各种应用程序中使用时,我需要注入依赖项,以便它可以执行特定于该应用程序的某些操作.

我能想到的唯一方法是从Person对象继承Application A和B中的新Type.然后,我将非共享功能和DI代码添加到此特定于应用程序的专用Person对象中.现在我写道它似乎很明显,但它仍然是我能提出的唯一解决方案,我想在这里询问是否有其他人有他们想提出的不同解决方案?

我对解决方案的一个问题是,我可以看到自己陷入命名我的继承类型 - 我的意思是......它是一个人,所以你还能称之为什么呢?无论如何,希望你会有一些想法给我.

此外,我对现有的技术并不吝啬,实际上,老实说,我只是勉强掌握我目前正在使用的技术.因此,如果我说了一些矛盾或混乱的话,我希望你能从帖子的其余部分中理解得足以得到我所要求的东西.

c# oop orm dependency-injection

8
推荐指数
1
解决办法
195
查看次数

lodash _.intersection() 最有效的逆是什么

使用lodash,我想找到两个不同数组之间的所有元素,基本上与_.intersection[with|by]相反或相反。当然,我回顾了_.difference[with|by] but it's not an inverse version of _.intersection as it only compares the first array with the second, rather than comparing them against each other. The closest I was able to get is very cludgy which has motivated me to ask here if I'm missing a more efficient and/or elegant option. I'm only interested in lodash based solutions.

这是我能想到的最接近的方法,以获得两个数组之间不同的唯一值数组。id我对具有不在数组中的属性的值以及具有匹配id属性但属性不同的值感兴趣v

const n = [{id: 0, v: 9.7}, {id: 1, …
Run Code Online (Sandbox Code Playgroud)

javascript lodash

7
推荐指数
1
解决办法
6696
查看次数

有没有更有效的方法将double转换为float?

我需要将多维双数组转换为锯齿状浮点数组.大小将从[2] [5]变为大约[6] [1024].

我很好奇如何循环并将双精度转换为浮点数将会执行并且它不太糟糕,对于[2] [5]数组大约225μs - 这是代码:

const int count = 5;
const int numCh = 2;
double[,] dbl = new double[numCh, count];
float[][] flt = new float[numCh][];

for (int i = 0; i < numCh; i++)
{
    flt[i] = new float[count];
    for (int j = 0; j < count; j++)
    {
        flt[i][j] = (float)dbl[i, j];
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果有更有效的技术,我想使用它们.我应该提一下,我只计时两个嵌套循环,而不是之前的分配.

经过多一点实验后,我认为99%的时间都是在循环上燃烧的,即使没有任务!

c# performance

6
推荐指数
1
解决办法
1947
查看次数

如何获取WPF Visual元素的缩放大小

我正在将WPF Visual(UserControl)渲染到位图,但问题是渲染的图像在缩放/转换之前是UserControl的大小.所以我们假设UserControl的设计是200x200像素.当我渲染到BMP时,我正在使用UserControl的ActualWidth和ActualHeightt,它们分别报告200和200.问题是UserControl在Canvas中并且是自动调整大小(设置为按窗口大小缩放/填充)到接近1200 x 1200(它更改)的值

我做了一些阅读和搜索,到目前为止还无法弄清楚如何确定有效大小,即控件在屏幕上绘制的大小.

我遇到了这个问题听起来很有希望,但返回的Transform不包含缩放数据.它确实如此,但它们都是1. 转换后获取元素位置

关于在哪里寻找渲染缩放的任何建议都会很棒!

[更新]根据建议,我包括相关代码:

public static Bitmap PngBitmap(this Visual visual)
{
    // Get height and width
    int width = (int)(double)visual.GetValue(
        FrameworkElement.ActualWidthProperty);
    int height = (int)(double)visual.GetValue(
        FrameworkElement.ActualHeightProperty);

    // Render
    RenderTargetBitmap rtb =
        new RenderTargetBitmap(
            width,
            height,
            96,
            96,
            PixelFormats.Default);
    rtb.Render(visual);

    // Encode
    PngBitmapEncoder encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(rtb));
    System.IO.MemoryStream stream = new System.IO.MemoryStream();
    encoder.Save(stream);

    // Create Bitmap
    Bitmap bmp = new Bitmap(stream);
    stream.Close();

    return bmp;
}

public static BitmapSource BitmapSource(this Visual visual)
{
    Bitmap bmp = …
Run Code Online (Sandbox Code Playgroud)

wpf

6
推荐指数
1
解决办法
5183
查看次数

如何将数字分成整数,每个都是n的倍数?

很难想出一个简洁的标题.我确信有什么条件可以实现我想要完成的任务,毫无疑问,我可以通过一种常见的算法来实现我的目标 - 我还不知道它们.

我需要将一个数字分成n个,每个都是50的倍数.这个数字本身是50的倍数.这是一个例子:将5,000除以3,最后得到三个数字,每个数字为50的倍数:

  • 1650
  • 1700
  • 1650

我也希望分配这些数字,以便它们来回翻转,这里有一个例子,有更多的数字来说明这一点:将5,000除以7,最后得到7个数字,每个数字为50的倍数:

  • 700
  • 750
  • 700
  • 750
  • 700
  • 700
  • 700

请注意,在上面的示例中,我并不担心额外的50不在系列中心,也就是说我不需要这样的东西:

  • 700
  • 700
  • 750 <---注意'50'是居中的
  • 700
  • 750 <---注意'50'是居中的
  • 700
  • 700

希望我已经清楚地问过这个问题,你明白我想要完成什么.

更新:这是我将要使用的功能.

var number = 5000;
var n = 7;
var multiple = 50;

var values = getIntDividedIntoMultiple(number, n, multiple)

function getIntDividedIntoMultiple(dividend, divisor, multiple)
{
    var values = [];
    while (dividend> 0 && divisor > 0)
    {
        var a = Math.round(dividend/ divisor / multiple) * multiple;
        dividend -= a;
        divisor--;
        values.push(a);
    }

    return values;
}
Run Code Online (Sandbox Code Playgroud)

javascript algorithm math

6
推荐指数
1
解决办法
9346
查看次数

导出的blob数据与DB数据不同

我正在尝试导出我们非常大的MySQL数据库(1.6GB - 主要是BLOB)并导入到新服务器中.我已经解决了大部分问题,最终完成了导入而没有任何错误.使用MySQL查询浏览器我在一个带有BLOB图像的表上运行查询并将其保存到磁盘(使用查询浏览器中的保存图标).当我尝试打开文件时收到"无效的图像格式"错误.哦,哦.

使用查询浏览器,我检查了源数据库和最近导入的新数据库上的值.我想,价值观是不同的.它可能只是编码问题或其他东西.这是我看到的:

源(有效数据)服务器:

FF D8 FF E0    00 10 4A 46    49 46 00 01    01 01 00 60
00 60 00 00    FF DB 00 43    00 08 06 06    07 06 05 08
and so on...
Run Code Online (Sandbox Code Playgroud)

新服务器:

C3 BF C3 98    C3 BF C3 A0    00 10 4A 46    49 46 00 01
01 01 00 60    00 60 00 00    C3 BF C3 9B    00 43 00 08
and so on...
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我的新手眼睛看来,"新"服务器上的数据前面有3个字节的额外数据.

然后我使用010编辑器检出了sql转储文件.我找到了这个特定示例的行,这是我看到的: …

mysql mysqldump character-encoding

6
推荐指数
1
解决办法
2700
查看次数