SetPixelRed(tile_image,ScaleCharToQuantum(xcfdata->red),q);
SetPixelGreen(tile_image,ScaleCharToQuantum(xcfdata->green),q);
SetPixelBlue(tile_image,ScaleCharToQuantum(xcfdata->blue),q);
- SetPixelAlpha(tile_image,xcfdata->alpha == 0U ? OpaqueAlpha :
+ SetPixelAlpha(tile_image,xcfdata->alpha == 0U ? TransparentAlpha :
ScaleCharToQuantum((unsigned char) inLayerInfo->alpha),q);
xcfdata++;
q+=GetPixelChannels(tile_image);
}
case 3:
{
- SetPixelAlpha(tile_image,data == 0 ? OpaqueAlpha :
+ SetPixelAlpha(tile_image,data == 0U ? TransparentAlpha :
ScaleCharToQuantum((unsigned char) inLayerInfo->alpha),q);
break;
}
}
case 3:
{
- SetPixelAlpha(tile_image,data == 0 ? OpaqueAlpha :
+ SetPixelAlpha(tile_image,data == 0U ? TransparentAlpha :
ScaleCharToQuantum((unsigned char) inLayerInfo->alpha),q);
break;
}
/* composite the tile onto the layer's image, and then destroy it */
(void) CompositeImage(inLayerInfo->image,tile_image,CopyCompositeOp,
- MagickTrue,destLeft*TILE_WIDTH,destTop*TILE_HEIGHT,exception);
+ MagickTrue,destLeft * TILE_WIDTH,destTop*TILE_HEIGHT,exception);
tile_image=DestroyImage(tile_image);
/* adjust tile position */
return(MagickFalse);
/* clear the image based on the layer opacity */
outLayer->image->background_color.alpha=
- ScaleCharToQuantum((unsigned char) (255-outLayer->alpha));
+ ScaleCharToQuantum((unsigned char) outLayer->alpha);
(void) SetImageBackgroundColor(outLayer->image,exception);
/* set the compositing mode */
else
if (image_type == GIMP_INDEXED)
ThrowReaderException(CoderError,"ColormapTypeNotSupported");
+ (void) SetImageBackgroundColor(image,exception);
image->matte=MagickTrue;
/*
Read properties.
/*BOGUS: ignored for now */
/*float factor = (float) */ (void) ReadBlobMSBLong(image);
/* size_t digits = */ (void) ReadBlobMSBLong(image);
- for (i=0; i < 5; i++)
- (void) ReadBlobStringWithLongSize(image,unit_string,
+ for (i=0; i<5; i++)
+ (void) ReadBlobStringWithLongSize(image, unit_string,
sizeof(unit_string),exception);
}
break;
else
{
int
- number_layers = 0,
- num_layers = 0,
current_layer = 0,
- first_layer = 0,
- last_layer = 0,
- last = 0,
- foundAllLayers = MagickFalse;
+ foundAllLayers = MagickFalse,
+ number_layers = 0;
MagickOffsetType
- oldPos;
+ oldPos=TellBlob(image);
XCFLayerInfo
*layer_info;
/*
the read pointer
*/
- oldPos=TellBlob(image);
do
{
ssize_t offset = (int) ReadBlobMSBLong(image);
offset=SeekBlob(image,oldPos,SEEK_SET); /* restore the position! */
if (offset < 0)
ThrowReaderException(CorruptImageError,"ImproperImageHeader");
- first_layer=image_info->scene;
- num_layers=number_layers;
- /* number_scenes==0 means read all the images */
- if ((image_info->number_scenes > 0) &&
- (image_info->number_scenes < number_layers))
- num_layers=image_info->scene;
- last_layer=first_layer+num_layers-1;
-
- /* XCF has layers backwards. */
- last=last_layer;
- last_layer=number_layers-first_layer - 1;
- first_layer=number_layers-last-1;
- number_layers=num_layers;
-
/* allocate our array of layer info blocks */
length=(size_t) number_layers;
layer_info=(XCFLayerInfo *) AcquireQuantumMemory(length,
* next layer offset is stored.
*/
saved_pos=TellBlob(image);
- if ((first_layer <= current_layer) && (current_layer <= last_layer))
+ /* seek to the layer offset */
+ offset=SeekBlob(image,offset,SEEK_SET);
+ /* read in the layer */
+ layer_ok=ReadOneLayer(image,&doc_info,&layer_info[current_layer],
+ exception);
+ if (layer_ok == MagickFalse)
{
- /* seek to the layer offset */
- offset=SeekBlob(image,offset,SEEK_SET);
- /* read in the layer */
- layer_ok=ReadOneLayer(image,&doc_info,&layer_info[current_layer],
- exception);
- if (layer_ok == MagickFalse)
- {
- int j;
-
- for (j=0; j < current_layer; j++)
- layer_info[j].image=DestroyImage(layer_info[j].image);
- layer_info=(XCFLayerInfo *) RelinquishMagickMemory(layer_info);
- ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
- }
- /* restore the saved position so we'll be ready to
- * read the next offset.
- */
- offset=SeekBlob(image, saved_pos, SEEK_SET);
- }
- current_layer++;
+ int j;
+
+ for (j=0; j < current_layer; j++)
+ layer_info[j].image=DestroyImage(layer_info[j].image);
+ ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
}
+ /* restore the saved position so we'll be ready to
+ * read the next offset.
+ */
+ offset=SeekBlob(image, saved_pos, SEEK_SET);
+ current_layer++;
+ }
if (number_layers == 1)
{
/*
*/
(void) CompositeImage(image,layer_info[0].image,OverCompositeOp,
MagickTrue,layer_info[0].offset_x,layer_info[0].offset_y,exception);
- layer_info[0].image=DestroyImage( layer_info[0].image);
+ layer_info[0].image =DestroyImage( layer_info[0].image);
}
else
{
/* BOGUS: need to consider layer blending modes!! */
if ( layer_info[j].visible ) { /* only visible ones, please! */
- CompositeImage(image, layer_info[j].image, OverCompositeOp,
- MagickTrue, layer_info[j].offset_x, layer_info[j].offset_y );
+ CompositeImage(image, OverCompositeOp, layer_info[j].image,
+ layer_info[j].offset_x, layer_info[j].offset_y );
layer_info[j].image =DestroyImage( layer_info[j].image );
- /* If we do this, we'll get REAL gray images! */
+ /* Bob says that if we do this, we'll get REAL gray images! */
if ( image_type == GIMP_GRAY ) {
QuantizeInfo qi;
GetQuantizeInfo(&qi);
(void) CompositeImage(image,layer_info[number_layers-1].image,
CopyCompositeOp,MagickTrue,layer_info[number_layers-1].offset_x,
layer_info[number_layers-1].offset_y,exception);
- layer_info[number_layers-1].image=DestroyImage(
- layer_info[number_layers-1].image);
+ layer_info[number_layers-1].image=DestroyImage(
+ layer_info[number_layers-1].image);
/* now reverse the order of the layers as they are put
into subimages
*/
- image->next=layer_info[number_layers-2].image;
- layer_info[number_layers-2].image->previous=image;
- for (j=(ssize_t) number_layers-2; j>=0; j--)
- {
- if (j > 0)
- layer_info[j].image->next=layer_info[j-1].image;
- if (j < (number_layers-1))
- layer_info[j].image->previous=layer_info[j+1].image;
- layer_info[j].image->page.x = layer_info[j].offset_x;
- layer_info[j].image->page.y = layer_info[j].offset_y;
- layer_info[j].image->page.width = layer_info[j].width;
- layer_info[j].image->page.height = layer_info[j].height;
+ j=number_layers-2;
+ image->next=layer_info[j].image;
+ layer_info[j].image->previous=image;
+ layer_info[j].image->page.x=layer_info[j].offset_x;
+ layer_info[j].image->page.y=layer_info[j].offset_y;
+ layer_info[j].image->page.width=layer_info[j].width;
+ layer_info[j].image->page.height=layer_info[j].height;
+ for (j=number_layers-3; j>=0; j--)
+ {
+ if (j > 0)
+ layer_info[j].image->next=layer_info[j-1].image;
+ if (j < (number_layers-1))
+ layer_info[j].image->previous=layer_info[j+1].image;
+ layer_info[j].image->page.x=layer_info[j].offset_x;
+ layer_info[j].image->page.y=layer_info[j].offset_y;
+ layer_info[j].image->page.width=layer_info[j].width;
+ layer_info[j].image->page.height=layer_info[j].height;
}
}
#endif