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処理が充実してきた。
差分
- グレイスケール DPX イメージファイルが斜めにならないように
- coders/dpx.c
- bits_per_pixel が 16 の時も(8以前と同様に) pad 変数を見てパディングするかどうかスイッチする。32 以降は無条件でパディング。
> 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);
- Q64 で 1-bit サンプルのスケーリングする時に Integer がオーバーフローするのを修正
- http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=27195
- グレースケールのパレットを作る際に整数型(size_t)を使ってたら Q32,64でオーバーフローしたので、浮動小数点型(Quantum = float)を使うようにした。
< 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) <その他、EOF で break する処理がたくさん追加>
- 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).