- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有人能看出这里有什么问题吗?我在“imageData.Save”行上收到“参数无效”,但我怀疑 imageData var 比这更早,因为我在 imageData 对象设置后看到一些参数异常。感谢您的任何建议。
using (Image image = Image.FromFile(Server.MapPath("~/User_Data/asset.png")))
{
Image imageData = ResizeImage(image, 120, 120, image.Width, image.Height);
string base64String = this.ImageToBase64String(imageData, ImageFormat.Png);
<snip>
}
public string ImageToBase64String(Image imageData, ImageFormat format)
{
using (var stream = new MemoryStream())
{
imageData.Save(stream, format);
return Convert.ToBase64String(stream.ToArray());
}
}
public Image ResizeImage(Image image, int canvasWidth, int canvasHeight, int originalWidth, int originalHeight)
{
using (Image image2 = new Bitmap(canvasWidth, canvasHeight))
using (Graphics graphics = Graphics.FromImage(image2))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality;
double num = ((double)canvasWidth) / ((double)originalWidth);
double num2 = ((double)canvasHeight) / ((double)originalHeight);
double num3 = (num < num2) ? num : num2;
int height = Convert.ToInt32((double)(originalHeight * num3));
int width = Convert.ToInt32((double)(originalWidth * num3));
int x = Convert.ToInt32((double)((canvasWidth - (originalWidth * num3)) / 2.0));
int y = Convert.ToInt32((double)((canvasHeight - (originalHeight * num3)) / 2.0));
graphics.Clear(Color.White);
graphics.DrawImage(image, x, y, width, height);
ImageCodecInfo.GetImageEncoders();
using (var parameters = new EncoderParameters(1))
{
parameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
}
return image2;
}
}
这是我的调试器的屏幕截图...在 imageData 建立之后和调用 ImageToBase64String 之前立即停止。 imageData 中的那些异常不会使应用程序崩溃,但肯定看起来不对吗?
最佳答案
简短的回答是,您正在通过 using
block 处理 image2
,然后尝试在方法之外使用它。如果您检查 ImageData
,您会看到各种错误数据和异常:
如果您要退回它,请不要丢弃它;调用代码将在完成后负责处理它:
//using (Image image2 = new Bitmap(canvasWidth, canvasHeight))
Image image2 = new Bitmap(canvasWidth, canvasHeight);
using (Graphics graphics = Graphics.FromImage(image2))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
...
}
return image2;
有一种更简单的缩放图像的方法,编解码器/质量参数代码什么都不做。
public Image ResizeImage2(Image image, int canvasWidth, int canvasHeight)
{
// org size is already available
Size orginalSize = image.Size;
Size newSize = Size.Empty;
float scale;
if (canvasWidth != 0)
{
scale = (float)orginalSize.Height / orginalSize.Width;
newSize = new Size(canvasWidth, Convert.ToInt32(scale * canvasWidth));
}
else if (canvasHeight != 0)
{
scale = (float)orginalSize.Width / orginalSize.Height;
newSize = new Size(Convert.ToInt32(scale * canvasHeight), canvasHeight);
}
//using (Image image2 = new Bitmap(canvasWidth, canvasHeight))
Image image2 = new Bitmap(newSize.Width, newSize.Height);
using (Graphics graphics = Graphics.FromImage(image2))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.Clear(Color.White);
graphics.DrawImage(image, 0, 0, newSize.Width, newSize.Height);
return image2;
}
}
这会根据目标宽度或高度使用较少的变量来缩放传递的图像。编解码器的东西被删除了,因为您将把它与 Save 方法一起使用:
using (Image img = Image.FromFile(@"C:\Temp\BigHead.jpg"))
{
// resize img to the height of a PicBox
Image imageData = ResizeImage2(img, 0, pb2.Height);
// winforms show img
pb2.Image = imageData;
// get codec
ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders()
.FirstOrDefault(z => z.MimeType == "image/jpeg");
using (var qparam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L))
{
EncoderParameters encParams = new EncoderParameters(1);
encParams.Param[0] = qparam;
imageData.Save(@"C:\Temp\BigHead_thumb.jpg", codec, encParams);
// test: no encoder
imageData.Save(@"C:\Temp\BigHead_thumb2.jpg");
}
// ToDo: dispose of returned image
}
调用代码可以查看图像并决定是缩放到高度还是宽度。如果您想指定非默认质量级别,则 Image.Save
方法会使用编码器。
生成的文件大小反射(reflect)了编码器的影响:默认方法为 72k,使用质量参数为 194k。
关于c# - Image.Save 上的参数无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39059596/
我正在从tangowithdjango学习django 。我试图理解 populate_rango.py 的代码。代码是: import os os.environ.setdefault('DJANG
我试图理解Rserve参数--save,-no-save和--vanilla之间的区别。我在文档或任何论坛中都没有看到任何描述这些效果的内容。有谁确切地知道这些是做什么的? 在OSX中,我需要指定其中
我正在使用 CoreData 制作一个基于文档的应用程序。我可以创建一个新文档,编辑该文档,然后保存它。文件已创建并可以打开。打开后,数据会正确加载。但是,一旦进行了初始保存,所有后续保存都不会执行任
下面提出了类似的问题 How to save complete web page 但目前还没有答案。预期的结果是得到很多文件,一些文件来存储图像等。 我使用了以下内容,它会弹出一个窗口说保存文件 va
我们一直在测试一种不同的保存方式。然而,结果并不像我们预期的那样。我们有创建调查的方法,每个调查有多个问题。我们测试了几个案例,它们都以相同的方式提交查询。 @Transactional class
我想了解JAP Repotitoty的详细信息。我创建了一个服务类、实体类和存储库类,如下所示(用 kotlin 编写)并执行了 ItemService#update 方法。 执行 item2Repo
我正在开发我的第一个 Firefox 扩展。我正在尝试将数据保存在浏览器的本地存储中(使用 Window.localStorage 很容易,但我正在关注 official recommandation
这让我很郁闷。我是 C Sharp 的新手,因此需要一些帮助。我的保存/另存为完全是胡说八道。 真的有两个问题: 如何在不弹出保存对话框的情况下保存对现有文件的更改?如果我单击“保存”,它会弹出一个对
我有一个代码可以将 XML 文件保存到我的目录中。它在我的本地主机和我的共享主机中实际上就像一个魅力,但它在我的 Linux VPS 中不起作用。 我总是遇到这个错误: 警告:DOMDocument:
有没有办法在 django 管理站点中同时“另存为”和“保存并添加另一个”? 最佳答案 我不认为按钮引用的 URL 有任何神奇之处,因此您可以通过简单地覆盖每个 http://docs.djangop
创建 playramework 的模型时,我们可以使用 save() 或 _save() 方法。为什么这两种方法在框架中都可用,原因是什么? (在这种情况下,他们做同样的事情 - 将对象保存到数据库)
我见过两个都调用 $save 的代码和 save到 $resource 的 Angular 。 有什么区别,你什么时候使用? 最佳答案 最佳解释===例子 : // by writing '{ id:
根据save bang your head, active record will drive you mad ,在特殊情况下我们应该避免使用 save! 和 rescue 习惯用法。鉴于此,假设模型
我的菜单栏中有两个按钮,其中包含“保存”和“另存为”按钮。但是,我目前拥有它们相同的代码,并且它会按当前方式保存,并提示用户要保存在哪里。我希望保存按钮仅保存而不提示对话框,除非文件尚不存在。 我尝试
我知道 models.Model 和 forms.ModelForm 都包含您可以覆盖的 .save() 方法。我的问题是它们如何以及何时用于保存对象以及以什么顺序。 最佳答案 ModelForm.s
我一直在尝试使用 freeze_graph函数来获取模型+权重/偏差,但在这个过程中,我发现我的初始网络似乎没有任何变量,尽管能够正确分类图像。我的代码如下: #!/usr/bin/python im
尝试使用 gTTS 模块将文本转换为语音并另存为 wav 文件。 我的代码: import gTTS text = "This is my text in the saving folder" tts
我有一个包含大约 50 个字段和两个提交按钮的表单,“保存”和“保存并提交”。如果用户单击“保存”,则插入用户在表格中填写的值。当用户单击“保存并提交”按钮时,它应该更新或插入用户在表单中填写的所有字
我是 Django 新手。我想知道 django 中的 ModelForm 和 Model 如何协同工作?我的意思是 ModelForm.save() 如何自动保存与之关联的模型?它如何从 reque
我有亲子关系: @Entity @Table(name = "user") public final class User { @Id @GeneratedValue(strategy
我是一名优秀的程序员,十分优秀!