Changeset 11666 for ImageMagick/trunk/magick
- Timestamp:
- 07/18/08 18:12:16 (7 weeks ago)
- Location:
- ImageMagick/trunk/magick
- Files:
-
- 2 modified
-
annotate.c (modified) (1 diff)
-
draw.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ImageMagick/trunk/magick/annotate.c
r11663 r11666 1559 1559 *p; 1560 1560 1561 id=GetCacheViewThreadId(); 1561 if (status == MagickFalse) 1562 continue; 1562 1563 x_offset=(long) (point.x+0.5); 1563 1564 y_offset=(long) (point.y+y+0.5); 1564 1565 if ((y_offset < 0) || (y_offset >= (long) image->rows)) 1565 1566 continue; 1567 id=GetCacheViewThreadId(); 1566 1568 q=GetCacheViewPixels(image_view[id],x_offset,y_offset, 1567 1569 bitmap->bitmap.width,1); -
ImageMagick/trunk/magick/draw.c
r11665 r11666 947 947 */ 948 948 949 static ResampleFilter **DestroyResampleFilterThreadSet(ResampleFilter **filter) 950 { 951 register long 952 i; 953 954 assert(filter != (ResampleFilter **) NULL); 955 for (i=0; i < (long) GetCacheViewMaximumThreads(); i++) 956 if (filter[i] != (ResampleFilter *) NULL) 957 filter[i]=DestroyResampleFilter(filter[i]); 958 return((ResampleFilter **) RelinquishMagickMemory(filter)); 959 } 960 961 static ResampleFilter **AcquireResampleFilterThreadSet(const Image *image, 962 ExceptionInfo *exception) 963 { 964 register long 965 i; 966 967 ResampleFilter 968 **filter; 969 970 filter=(ResampleFilter **) AcquireQuantumMemory(GetCacheViewMaximumThreads(), 971 sizeof(*filter)); 972 if (filter == (ResampleFilter **) NULL) 973 return((ResampleFilter **) NULL); 974 (void) ResetMagickMemory(filter,0,GetCacheViewMaximumThreads()* 975 sizeof(*filter)); 976 for (i=0; i < (long) GetCacheViewMaximumThreads(); i++) 977 { 978 filter[i]=AcquireResampleFilter(image,exception); 979 if (filter[i] == (ResampleFilter *) NULL) 980 return(DestroyResampleFilterThreadSet(filter)); 981 } 982 return(filter); 983 } 984 949 985 static SegmentInfo AffineEdge(const Image *image,const AffineMatrix *affine, 950 986 const double y,const SegmentInfo *edge) … … 1081 1117 1082 1118 long 1083 x_offset,1084 1119 y; 1085 1120 1086 MagickPixelPacket 1087 composite, 1088 pixel; 1121 MagickBooleanType 1122 status; 1089 1123 1090 1124 PointInfo … … 1095 1129 1096 1130 register long 1097 i, 1098 x; 1099 1100 register IndexPacket 1101 *indexes; 1102 1103 register PixelPacket 1104 *q; 1131 i; 1105 1132 1106 1133 ResampleFilter 1107 * resample_filter;1134 **resample_filter; 1108 1135 1109 1136 SegmentInfo 1110 edge, 1111 inverse_edge; 1137 edge; 1112 1138 1113 1139 ViewInfo 1114 * image_view,1115 * source_view;1140 **image_view, 1141 **source_view; 1116 1142 1117 1143 /* … … 1157 1183 if (SetImageStorageClass(image,DirectClass) == MagickFalse) 1158 1184 return(MagickFalse); 1159 GetMagickPixelPacket(image,&pixel); 1160 GetMagickPixelPacket(image,&composite); 1185 status=MagickTrue; 1161 1186 edge.x1=MagickMax(min.x,0.0); 1162 1187 edge.y1=MagickMax(min.y,0.0); … … 1164 1189 edge.y2=MagickMin(max.y,(double) image->rows-1.0); 1165 1190 inverse_affine=InverseAffineMatrix(affine); 1166 resample_filter=AcquireResampleFilter (source,&image->exception);1167 image_view=AcquireCacheView (image);1168 source_view=AcquireCacheView (source);1191 resample_filter=AcquireResampleFilterThreadSet(source,&image->exception); 1192 image_view=AcquireCacheViewThreadSet(image); 1193 source_view=AcquireCacheViewThreadSet(source); 1169 1194 for (y=(long) (edge.y1+0.5); y <= (long) (edge.y2+0.5); y++) 1170 1195 { 1196 long 1197 x_offset; 1198 1199 MagickPixelPacket 1200 composite, 1201 pixel; 1202 1203 PointInfo 1204 point; 1205 1206 register IndexPacket 1207 *indexes; 1208 1209 register long 1210 id, 1211 x; 1212 1213 register PixelPacket 1214 *q; 1215 1216 SegmentInfo 1217 inverse_edge; 1218 1219 id=GetCacheViewThreadId(); 1171 1220 inverse_edge=AffineEdge(source,&inverse_affine,(double) y+0.5,&edge); 1172 1221 if (inverse_edge.x2 < inverse_edge.x1) 1173 1222 continue; 1174 q=GetCacheViewPixels(image_view ,(long) (inverse_edge.x1+0.5),y,1223 q=GetCacheViewPixels(image_view[id],(long) (inverse_edge.x1+0.5),y, 1175 1224 (unsigned long) ((long) (inverse_edge.x2+0.5)-(long) 1176 1225 (inverse_edge.x1+0.5)+1),1); 1177 1226 if (q == (PixelPacket *) NULL) 1178 1227 continue; 1179 indexes=GetCacheViewIndexes(image_view); 1228 indexes=GetCacheViewIndexes(image_view[id]); 1229 GetMagickPixelPacket(image,&pixel); 1230 GetMagickPixelPacket(image,&composite); 1180 1231 x_offset=0; 1181 1232 for (x=(long) (inverse_edge.x1+0.5); x <= (long) (inverse_edge.x2+0.5); x++) … … 1185 1236 point.y=(double) x*inverse_affine.rx+y*inverse_affine.sy+ 1186 1237 inverse_affine.ty; 1187 pixel=ResamplePixelColor(resample_filter ,point.x,point.y);1238 pixel=ResamplePixelColor(resample_filter[id],point.x,point.y); 1188 1239 SetMagickPixelPacket(image,q,indexes+x_offset,&composite); 1189 1240 MagickPixelCompositeOver(&pixel,pixel.opacity,&composite, … … 1193 1244 q++; 1194 1245 } 1195 if (SyncCacheView(image_view ) == MagickFalse)1196 break;1246 if (SyncCacheView(image_view[id]) == MagickFalse) 1247 status=MagickFalse; 1197 1248 } 1198 resample_filter=DestroyResampleFilter (resample_filter);1199 source_view=DestroyCacheView (source_view);1200 image_view=DestroyCacheView (image_view);1201 return( MagickTrue);1249 resample_filter=DestroyResampleFilterThreadSet(resample_filter); 1250 source_view=DestroyCacheViewThreadSet(source_view); 1251 image_view=DestroyCacheViewThreadSet(image_view); 1252 return(status); 1202 1253 } 1203 1254 … … 3805 3856 if (status == MagickFalse) 3806 3857 continue; 3858 x=start; 3807 3859 id=GetCacheViewThreadId(); 3808 x=start;3809 3860 q=GetCacheViewPixels(image_view[id],x,y,(unsigned long) (stop-x+1),1); 3810 3861 if (q == (PixelPacket *) NULL)
