ImageMagick-6.9.1-0差分

ImageMagick-6.9.0-10差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.1-0

まとめ

グレースケールDPXで歪む問題とQ64の時にPNGの1bitグレイスケールの変換で真っ黒になる問題の修正。
あと Quantum のExport/Import処理が充実してきた。

差分

>    case 16:
>    {
>       if (pad == MagickFalse)
>         {
>           bytes_per_row=2*(((size_t) samples_per_pixel*columns*bits_per_pixel+
>             15)/16);
  • GetBytesPerRow で一行保存に必要なバイト数を取得する時に packing 指定に応じて第3引数(pad)の True/False を切り替え。以前は True 決め打ちだったので Skew が発生していた。
<       extent=GetBytesPerRow(image->columns,1UL,image->depth,MagickTrue);
---
>       extent=GetBytesPerRow(image->columns,1UL,image->depth,
>         dpx.image.image_element[0].packing == 0 ? MagickFalse : MagickTrue);
<           size_t
>           Quantum
               scale
<           scale=(QuantumRange/((1UL << ping_file_depth)-1));
>           scale = 65535UL/((1UL << ping_file_depth)-1);
<           if (scale < 1)
<              scale=1;
> #if (MAGICKCORE_QUANTUM_DEPTH > 16)
>           scale = ScaleShortToQuantum(scale);
ChangeLogにない差分
  • ImageMagick-6.9.1-0/coders/clip.c
    • ReadImage で NULL が返ってきた時に ClipImage を呼ばないようにした。
>   if (image != (Image *) NULL)
>     {
>       Image
>         *clip_image;
  • coders/dds.c
    • ラッパーを呼ぶようにした。
2736c2736
<   (void) strcpy(software,"IMAGEMAGICK");
---
>   (void) CopyMagickString(software,"IMAGEMAGICK",MaxTextExtent);
  • coders/mask.c
    • 内部的なフォーマットなので MIFF としてマークした
<   *read_info->magick='\0';
>   (void) CopyMagickString(read_info->magick,"MIFF",MaxTextExtent);
  • coders/pict.c
    • ReadBlobByte の途中で EOF がきたら処理をそこで止める。(以前は無条件で508回ループ)
<       (void) ReadBlobByte(image);
>       if (ReadBlobByte(image) == EOF)
<その他、EOFbreak する処理がたくさん追加>
  • coders/png.c
    • ログメッセージを少し詳細にした
>
>           if (logging != MagickFalse)
>             (void) LogMagickEvent(CoderEvent,GetMagickModule(),
>               "  Creating PNG blob for alpha.");
>
12245,12248d12250
<           if (logging != MagickFalse)
<             (void) LogMagickEvent(CoderEvent,GetMagickModule(),
<               "  Creating PNG blob.");
<
12269a12272,12275
>           if (logging != MagickFalse)
>             (void) LogMagickEvent(CoderEvent,GetMagickModule(),
>               "  Creating JPEG blob for alpha.");
>
12279,12281d12284
<           if (logging != MagickFalse)
<             (void) LogMagickEvent(CoderEvent,GetMagickModule(),
<               "  Creating blob.");
  • coders/tiff.c
    • photometric の対応を増やした
>       {
>         (void) SetImageProperty(image,"tiff:photometric","CIE Log2(L)");
>         break;
>       }
<         (void) TIFFSetField(tiff,TIFFTAG_SGILOGDATAFMT,SGILOGDATAFMT_FLOAT);
---
>         (void) SetImageProperty(image,"tiff:photometric","LOGLUV");
>         break;
> #if defined(PHOTOMETRIC_MASK)
>       case PHOTOMETRIC_MASK:
>       {
>         (void) SetImageProperty(image,"tiff:photometric","MASK");
  • coders/wmf.c
-- id の文字数を増やした。尚、MaxTextExtent は 4096 (method-attribute.h)
<     pattern_id[30];
>     pattern_id[MaxTextExtent];
<同様に MaxTextExtent>
  • magick/compare.c
    • matric の NormalizedCrossCorrelationErrorMetric, UndefinedErrorMetric 対応。
>       if ((metric == NormalizedCrossCorrelationErrorMetric) ||
>           (metric == UndefinedErrorMetric))
>         similarity=1.0-similarity;
  • magick/quantum-export.c
    • GetPixelAlpha を使う
<                 case 3: quantum=(Quantum) (QuantumRange-GetPixelOpacity(p)); break;
>                 case 3: quantum=(Quantum) GetPixelAlpha(p); break;
<その他、同様に GetPixelAlpha を使うよう変更>
    • ExportQuantumPixels の quantum_type を増やして、その処理をする新しい関数ができた > ExportBGROQuantum, ExportCMYKOQuantum, ExportRGBOQuantum
> static void ExportBGROQuantum(QuantumInfo *quantum_info,
>   const MagickSizeType number_pixels,const PixelPacket *restrict p,
>   unsigned char *restrict q)
> {
> static void ExportCMYKOQuantum(const Image *image,QuantumInfo *quantum_info,
>  const MagickSizeType number_pixels,const PixelPacket *restrict p,
>  const IndexPacket *restrict indexes,unsigned char *restrict q,
>  ExceptionInfo *exception)
>{
> static void ExportRGBOQuantum(QuantumInfo *quantum_info,
>   const MagickSizeType number_pixels,const PixelPacket *restrict p,
>   unsigned char *restrict q)
> {
  • magick/import-quantum.c
    • ImportQuantumPixels の quantum_type を増やして、その処理をする新しい関数ができた > ImportBGROQuantum, ImportCMYKOQuantum, ImportRGBOQuantum
> static void ImportBGROQuantum(QuantumInfo *quantum_info,
>   const MagickSizeType number_pixels,const unsigned char *restrict p,
>   PixelPacket *restrict q)
> {
> static void ImportCMYKOQuantum(const Image *image,QuantumInfo *quantum_info,
>   const MagickSizeType number_pixels,const unsigned char *restrict p,
>   PixelPacket *restrict q,IndexPacket *restrict indexes,
>   ExceptionInfo *exception)
> {
> static void ImportRGBOQuantum(QuantumInfo *quantum_info,
>   const MagickSizeType number_pixels,const unsigned char *restrict p,
>   PixelPacket *restrict q)
> {
  • magick/xwindow.c
    • geometry 文字列のコピーでサイズ上限指定が効いてないような。。。
<           (void) CopyMagickString(p,p+1,MaxTextExtent);
>           (void) CopyMagickString(p,p+1,MaxTextExtent-(p-geometry));
  • Magick++
    • 気が向いたら見る。例えば string を std::string に書き換えたりしてる。

ChangeLog

2015-03-21  6.9.1-0 Cristy  <quetzlzacatenango@image...>
  * New version 6.9.1-0, SVN revision 18245.

2015-03-17  6.9.1-0 Cristy  <quetzlzacatenango@image...>
  * Grayscale DPX image files are no longer skewed (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=27209).

2015-03-16  6.9.1-0 Glenn Randers-Pehrson <glennrp@image...>
  * Fix integer overflow when scaling a 1-bit sample to Q64 (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=27195).