ImageMagick-6.9.3-7差分
ImageMagick-6.9.3-6差分 - yoyaのメモの続き
The latest release of ImageMagick is version 6.9.3-7
まとめ
差分
ChangeLog の分
> if (image_info->size != (char *) NULL) > { > (void) GetGeometry(image_info->size,(ssize_t *) NULL, > (ssize_t *) NULL,&image->columns,&image->rows); > if ((image->columns != 0) || (image->rows != 0)) > { > image->x_resolution=90.0*image->columns/dimension_info.width; > image->y_resolution=90.0*image->rows/dimension_info.height; > if (image->x_resolution == 0) > image->x_resolution=image->y_resolution; > else if (image->y_resolution == 0) > image->y_resolution=image->x_resolution; > else > image->x_resolution=image->y_resolution=MagickMin( > image->x_resolution,image->y_resolution); > } > }
-
- EMF (Windows で動かなかった)
- coders/emf.c
- EMF (Windows で動かなかった)
> static inline void EMFSetDimensions(Image * image,Gdiplus::Image *source) > { > if ((image->x_resolution <= 0.0) || (image->y_resolution <= 0.0)) > return; > > image->columns=(size_t) floor((Gdiplus::REAL) source->GetWidth()/ > source->GetHorizontalResolution()*image->x_resolution+0.5); > image->rows=(size_t)floor((Gdiplus::REAL) source->GetHeight()/ > source->GetVerticalResolution()*image->y_resolution+0.5); > }
- label: / coder: のテキストの並びを修正した件
ChangeLogにない差分
- Magick++/lib/Image.cpp
- waveletDenose の引数に softness_ 追加
< void Magick::Image::waveletDenoise(const double threshold_) --- > void Magick::Image::waveletDenoise(const double threshold_, > const double softness_)
- magick/annotate.c
< ft_status=FT_Get_Kerning(face,last_glyph,(*grapheme)[i].index, < ft_kerning_default,&kerning); --- > ft_status=FT_Get_Kerning(face,(FT_UInt) last_glyph,(FT_UInt) > (*grapheme)[i].index,ft_kerning_default,&kerning);
- magick/fx.c
- double 配列での処理を float に変更。sizeof(*kernel) を乗算してメモリ確保してるのでオーバーランしてた訳でもない。
< kernel=(double *) AcquireQuantumMemory(MagickMax(image->rows,image->columns), --- > kernel=(float *) AcquireQuantumMemory(MagickMax(image->rows,image->columns)
-
- 高速化っぽい。オフセットを毎回計算し直さずにポインタのオフセットをずらす方式にしてる。
< /* < Low pass filter outputs are called approximation kernel & high pass < filters are referred to as detail kernel. The detail kernel < have high values in the noisy parts of the signal. < */ < for (i=0; i < (ssize_t) radius; i++) < kernel[i]=2.0*pixels[width*i]+pixels[width*(radius-i)]+ < pixels[width*(i+radius)]; < for ( ; (i+radius) < (ssize_t) height; i++) < kernel[i]=2.0*pixels[width*i]+pixels[width*(i-radius)]+ < pixels[width*(i+radius)]; < for ( ; i < (ssize_t) height; i++) < kernel[i]=2.0*pixels[width*i]+pixels[width*(i-radius)]+ < pixels[width*(2*height-2-(i+radius))]; --- > p=pixels; > q=pixels+scale*stride, > r=pixels+scale*stride; > for (i=0; i < (ssize_t) scale; i++) > { > kernel[i]=0.25f*(*p+(*p)+(*q)+(*r)); > p+=stride; > q-=stride; > r+=stride; > } > for ( ; i < (ssize_t) (extent-scale); i++) > { > kernel[i]=0.25f*(2.0f*(*p)+*(p-scale*stride)+*(p+scale*stride)); > p+=stride; > } > q=p-scale*stride; > r=pixels+stride*(extent-2); > for ( ; i < (ssize_t) extent; i++) > { > kernel[i]=0.25f*(*p+(*p)+(*q)+(*r)); > p+=stride; > q+=stride; > r-=stride; > }
-
- こちらも同様
> *magick_restrict p, > *magick_restrict q; > 5906,5907c5923,5926 < HatTransform(pixels+y*image->columns+high_pass,1,image->columns, < 1UL << level,kernel+id*image->columns); --- > p=kernel+id*image->columns; > q=pixels+y*image->columns; > HatTransform(q+high_pass,1,image->columns,(size_t) (1 << level),p); > q+=low_pass; 5909c5928 < pixels[y*image->columns+x+low_pass]=0.25*kernel[id*image->columns+x]; --- > *q++=(*p++); 5919a5939,5942 > register float > *magick_restrict p, > *magick_restrict q; > 5923,5924c5946,5948 < HatTransform(pixels+x+low_pass,image->columns,image->rows,1UL << level, < kernel+id*image->rows); --- > p=kernel+id*image->rows; > q=pixels+x+low_pass; > HatTransform(q,image->columns,image->rows,(size_t) (1 << level),p); 5926c5950,5953 < pixels[y*image->columns+x+low_pass]=0.25*kernel[id*image->rows+y]; --- > { > *q=(*p++); > q+=image->columns; > } 6008c6035
- magick/geometry.c
- width, height で NULL を受け取れるようにした
> if (width != (size_t *) NULL) > { 229a232 > } 245a249 > if (height != (size_t *) NULL) 263a268 > if (x != (ssize_t *) NULL) 268c273 < if ((flags & XNegative) != 0) --- > if (((flags & XNegative) != 0) && (x != (ssize_t *) NULL)) 283a289 > if (y != (ssize_t *) NULL) 288c294 < if ((flags & YNegative) != 0) --- > if (((flags & YNegative) != 0) && (y != (ssize_t *) NULL)) 295a302 > if ((height != (size_t *) NULL) && (width != (size_t *) NULL)) 299c306,307 < if (((flags & SeparatorValue) != 0) && ((flags & WidthValue) == 0)) --- > if (((flags & SeparatorValue) != 0) && ((flags & WidthValue) == 0) && > (height != (size_t *) NULL) && (width != (size_t *) NULL))
- magick/memory.c
- lseek が失敗した時のケアが入った。ファイルが確保できない場合に問題だったはず
< if ((lseek(file,extent-1,SEEK_SET) == (extent-1)) && --- > MagickOffsetType > offset; > > offset=(MagickOffsetType) lseek(file,extent-1,SEEK_SET); > if ((offset == (MagickOffsetType) (extent-1)) &&
- wand/mogrify.c
- % 指定の時に rho だけでなく sigma も計算する
3302c3302,3305 < geometry_info.rho=(double) QuantumRange*geometry_info.rho/100.0; --- > { > geometry_info.rho=QuantumRange*geometry_info.rho/100.0; > geometry_info.sigma=QuantumRange*geometry_info.sigma/100.0; > }
(調査中)
ChangeLog
2016-03-26 6.9.3-7 Cristy <quetzlzacatenango@image...> * New version 6.9.3-7, GIT revision 10628:810a9fe:20160306 2016-03-05 6.9.3-7 Dirk Lemstra <dirk@lem.....org> * -size can now be used the specify the maximum width/height for the following vector formats: * SVG (when librsvg and cairo are being used). * EMF (did not work on Windows). 2016-02-29 6.9.3-7 Cristy <quetzlzacatenango@image...> * Fixed text alignment issue for label: / coder: (reference https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=29223).