我有一个奇怪的问题-我有大约14.5万位图,这被认为是压缩。我需要转换这些位图以JPG并将其存储在一个数据库。

当我使用的课程设置的。网系统。图库保存的图作为一个ImageFormat.Jpeg,所得到的JPEG是关于 两次 大小的原始图。这里是代码:

byte[] bitmapBytes = //get from the db
using(MemoryStream bitmapStream = new MemoryStream(bitmapBytes))
{
   using(Bitmap bitmap = (Bitmap)Bitmap.FromStream(bitmapStream))
   {
       bitmap.Save("jpg.jpg", ImageFormat.Jpeg);
   }
}

我已经看过六角的几个这样的图像,它看起来像压缩设定为"无"。所以我假设它们被压缩。此外,六角的原始文件有"BMP"代码和结果文件有"JFIF"的代码如你所期望的。

图像是黑色和白色的,没有颜色。

任何想法为什么这会发生?寻找指针在正确的方向...

编辑:

  • 我已经试过使用替代过载保存,允许指定的质量。没有任何好处看到。
  • 我还应当指定我是那种坚持JPEG某种程度上在这里。这是一个遗留系统和系统的其他部分的预期JPEG。

图像属性:

  • 位尺寸:152x48
  • 图文件的尺寸:1022字节
  • JPEG:同样尺寸
  • JPEG尺寸:2.2kb
  • 位的信息:编制索引,1层(2颜色)
  • Bitmap决议:96.012x96.012ppi
有帮助吗?

解决方案

这可能是因为jpeg图像你是节省是现在的24位RGB颜色图像,其中的位图1位黑色和白色的图像。

如果位图1位,jpeg可能不是最好的格式来转换他们。

其他提示

黑色和白或灰度?

http://www.faqs.org/faqs/compression-faq/part2/section-6.html:

"JPEG的作品在全颜色或灰图像;它并不能处理 双层(黑白)图像,至少不好。它不处理 colormapped图像;你必须先扩大这些成映射 全色的表示。JPEG工作最好在"连续的音"的图像。像许多突然跳在颜色的价值不会缩。"

你需要设置一个属性的编码来告诉它压缩水平来使用。

也参看

你会想切换到使用 这个过载位图。保存, 所以你可以指定 EncoderParameter.

为什么你的文件被越来越大,这可能是你的BMP运行长度编码,或者使用一个较小(不24位)bitmap.

一个比较大小为2色61x64图像:

  • 传真-4tiff:268字节
  • 2色bmp(如上):550字节
  • 8位jpeg:1502字节
  • 32位jpeg(作为系统。图会 创建):2015字节

所以,如果你有使用jpeg,将它们转化至8位第一。这样做。净将是尴尬的,但有样品代码可用于演示和其他人。

只是想来跟踪我的解决方案。我能得到系统的其余部分,以支持PNG格式的图形,那么我所做的就是换位图进入新的图形,以及使他们1点每素黑色和白色。这使他们小小的和有效的。

所以问题是,Jpg格式,只是没做几个颜色的图像。

只是一个想法:你说的一部分的你的系统需要的文件是JPEG文件。是真的,或者它是否只是需要的文件有JPG扩展?如果是这样,你可能--虽然它是丑陋的-只是重新命名的文件的扩展,因为BMP文件在您的案件是较小的。

例如,在Windows,你可以把一个BMP文件,并改变它的扩展到JPG,当你打开它,Windows不关心,并显示正确。

这kb的文章应该告诉你如何做到这一点

http://support.microsoft.com/kb/324790

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top