Tag: jpeg

将多个图像文件发送到mySQL

如何使用C#将多个jpg文件(如字节数组)发送到mySQL数据库? 我已经阅读并理解了如何将图像文件转换为字节数组,但我只能弄清楚如何将单个图像的方法作为一个blob用于mySQL。 我的应用程序要求用户上传至少2个图像文件,并允许最多10个,同时从多个textBox发送信息。 我尝试创建一个字节数组数组,但这不起作用。 当我在mySQL的INSERT字符串期间在特定索引处引用该数组时,它似乎只存储一个字节数组并引用该字节数组的索引而不是应该存储在该索引中的整个字节数组。 下面是一些显示我的尝试的代码: ///uploading the image and converting it to a byte array private void uploadButtonClick(object sender, RoutedEventArgs e) { chosenFileTextBox.Text = “No file chosen”; try { FileStream fs = new FileStream(imageFileNameArray[i], FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); imageFileArray = br.ReadBytes((int)fs.Length); ///Array of byte arrays imageArray[i] = imageFileArray; uploadedFilesTextBox.Text += imageFileSafeNameArray[i].ToString() […]

某些JPEG无法正确显示/大小限制

我有一个应用程序,我从Web下载jpegs,解码它们并在Windows Phone 7.1上显示它。 它运行良好,除了一个单独的jpeg文件。 我尝试了数百个jpeg的应用程序,这个问题很少发生。 顺便说一句,我尝试用PictureDecoder.DecodeJpeg和ImageTools的Jpeg解码器解码jpegs。 两者都产生了相同的结果。 图片的%60或%70显示为黑色,其余为正常。 注意:这不是2000 px限制问题。 在解码之后,我通过将图像分成几个部分来解决这个问题。 另一个注意:我检查了那些黑色区域的像素值,它们不是0(初始值)。 另一个注意事项2:在XAML中使用控件并将其源设置为下面的URL工作。 但这对我来说不是一个选择,因为我需要把它分成几块(因为2000 px问题)。 这是一个我遇到问题的jpeg: http : //d24w6bsrhbeh9d.cloudfront.net/photo/1840288_700b_v1.jpg 更新:在我解码了JPEG之后,我再次对其进行编码并将其保存到隔离的本地存储并使用Isolated Storage Explorer Tool获取该文件。 我可以显示图像,因此它被正确解码和编码。 我还在捣乱这个问题。

C#的WebP库

似乎在C#中没有WebP的代码示例。 有没有? 我不需要直接显示WebP图像,但保存和传输,因为WebP会很好。

JPEG压缩的TIFF比原始JPEG大得多

我正在尝试使用FreeImage.Net和C#将JPEG转换为使用JPEG压缩的TIFF 。 这很好,但是,对于低质量的JPGES,TIFF文件比原始文件大很多。 我假设TIFF大小不依赖于原始的JPEG质量,因为输出图像总是大致相同。 例如(转换屏幕截图): 2065kb JPEG (quality: 100%) –> 1282kb TIFF 379kb JPEG (quality: 50%) –> 1200kb TIFF 这种规模的增加对我们公司来说是不可接受的,因为我们的客户和我们正在处理大量文件。 有趣的是,当我用GIMP转换图像时,我得到了相同的结果。 现在我想知道: 这是根据TIFF标准还是特别的FreeImage / GIMP? (我认为两者都使用libtiff.dll )。 我想还有另一种方法,因为我们公司有一台扫描仪可以生成图像为JPEG压缩的TIFF,尺寸更小。 有没有人知道另一个库 (无论是否免费)可以更有效地处理这种转换,或者在FreeImage中实现这一点? 更新: 我看了一下TIFF 6.0规范 ,分析了我们的扫描仪生成的文件,并且能够编写一个将JPEG包装到一个非常简单的TIFF容器中的函数(也可以使用多个JPEG合并到多页TIFF中)。 对于那些对TIFF有所了解的人:我根据图像/页面的数量生成了一个新的TIFF文件(带有一个或多个IFD),并将现有JPEG图像的原始数据写入单个条带(每个IFD),使用以下字段/条目: NewSubfileType = 0 ImageWidth = //(width of the original JPEG) ImageLength = //(height of the original JPEG) BitsPerSample = {8, […]

C#如何为jpeg图像添加水印?

使用C#我如何将我正在读取的jpeg图像加水印到内存流并保存到字节数组? using (MemoryStream imageStream = new MemoryStream()) { pbPreview.Image.Save(imageStream, ImageFormat.Jpeg); photoBytes = imageStream.ToArray(); } 谢谢

C#.NET将JPEG图像转换为位图结构

我有一个JPEG“图像”(实际上是数据库中的BLOB),我想在内存中导入/转换为“位图”结构。 原因是我使用的第三方库无法处理JPEG图像,我需要传递一个未压缩的位图(作为指针)。 到目前为止,我发现的只是在磁盘上转换不同格式的方法,但首先将图像保存为位图并重新导入它将花费太长时间。 我对.NET知之甚少,但我认为System.Drawing.Bitmap应该能够保存未压缩的数据。 我正在使用C#和Visual Studio 2008。

C#控制台应用程序 – 如何使用GDI +绘制BMP / JPG文件?

我想使用C#控制台应用程序和GDI +在BMP或JPG文件中绘制矩形,箭头,文本,行等形状。 这是我在网上找到的: c#save System.Drawing.Graphics to file c#save System.Drawing.Graphics to file GDI + Tutorial for Beginners http://www.c-sharpcorner.com/UploadFile/mahesh/gdi_plus12092005070041AM/gdi_plus.aspx Professional C# – Graphics with GDI + codeproject .COM /用品/ 1355 /专业-C-图形与 – GDI 但这仍然无法帮助我。 其中一些链接仅针对Windows窗体应用程序解释了这一点,其他链接仅供参考(MSDN链接),仅解释GDI +中的类,方法等。 那么如何使用C#控制台应用程序绘制图片文件? 谢谢!

jpeg的色度子采样算法

我正在尝试编写一个jpeg编码器,并且在创建收集适当的Y,Cb和Cr颜色分量的算法时感到磕磕绊,以便传递给执行变换的方法。 据我所知,四个最常见的子采样变体设置如下(我可能会离开这里): 4:4:4 – 每个像素中包含Y,Cb和Cr的8×8像素的MCU块。 4:2:2 – 一个16×8像素的MCU块,每个像素为Y,每两个像素为Cb,Cr 4:2:0 – 一个16×16像素的MCU块,每两个像素为Y,每四个像素为Cb,Cr 到目前为止,我已经找到了关于laout的最明确的描述 我不明白的是如何以正确的顺序收集这些组件以作为8×8块进行转换和量化。 有人能够写一个例子,(伪代码可以,我确定,C#甚至更好),如何分组变换的字节? 我将包含我正在运行的当前不正确的代码。 /// /// Writes the Scan header structure /// /// The image to encode from. /// The writer to write to the stream. private void WriteStartOfScan(ImageBase image, EndianBinaryWriter writer) { // Marker writer.Write(new[] { JpegConstants.Markers.XFF, JpegConstants.Markers.SOS }); // Length (high byte, […]

c#将非常大的位图保存为jpegs(或任何其他压缩格式)

我目前正在处理非常大的图像,这些图像基本上是通过拼接许多较小的图像(例如全景图或照片马赛克软件)生成的。 为了避免内存不足exception(在内存中只是如何排列较小图像的“地图”),我写了一些代码,使用BinaryWriter和LockBits逐行保存这些图像作为位图。 到现在为止还挺好。 现在问题是我想将这些图像保存为Jpegs(或PNG)。 由于我对c#很陌生,我现在只能想到两种方法: 1)类似于位图保存程序。 生成一些jpeg标题并逐行保存大图像,以前以某种方式压缩它们。 我不知道如何执行压缩。 2)将已保存的位图流式传输到内存中并将其保存为编码的jpeg。 由于第二种方法似乎更容易,我尝试过这样的事情: FileStream fsr = new FileStream(“input.bmp”, FileMode.Open, FileAccess.Read); FileStream fsw = new FileStream(“output.jpg”, FileMode.CreateNew, FileAccess.Write); EncoderParameters encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 80L); Bitmap bmp = new Bitmap(fsr); bmp.Save(fsw, GetEncoder(ImageFormat.Jpeg), encoderParameters); bmp.Dispose(); 现在的问题是save-method尝试首先将位图完全加载到内存中,从而导致内存不足exception。 如果有任何关于如何解决或避免这个问题的建议,我会非常高兴!

在C#中渲染图像序列以制作video

我有一系列jpg图像,我正在捕捉并渲染到屏幕上以创建video。 我正在使用JpegBitmapDecoder从MemoryStream解压缩图像,并通过在Image控件上设置Source来渲染它。 这似乎工作正常,但处理器开销很高。 这些图像是1280×720,运行速度为30fps,我几乎可以跟上我的电脑(双核2.8Ghz)。 以更高的分辨率运行会导致我丢掉帧。 我想尝试降低cpu利用率。 花费的大部分时间似乎都在解码中(单独解码的简单基准测试在我的机器上显示我可以解码大约40fps)。 有谁知道是否有更快的解码器可用(DirectX?DirectShow?我可以卸载到video卡的东西?) 至于渲染,似乎Image控件不是为这种类型的使用而设计的(我实际上对它起作用感到惊讶,我只是尝试了它,因为它很容易做到)。 是否有另一种方法来渲染可能更快的单个帧?