[cairo] how to import .BMP without other libs(GTK+ etc)?

Aliner linermedia at gmail.com
Wed Feb 4 16:18:33 PST 2009


How did you handle the alpha channel in (for example) gif images?

    ExceptionInfo *exception;
    Image    *image;
    ImageInfo *image_info;
    long x, y;
    const PixelPacket *p;
    QuantizeInfo *qinfo;
    unsigned char *q;
    unsigned char *imgbuf;

    /*
     * Initialize the image info structure and read an image.
     */
    MagickCoreGenesis(*argv,MagickTrue);
    exception  = AcquireExceptionInfo();
    image_info = CloneImageInfo((ImageInfo *) NULL);
    (void) strcpy(image_info->filename,argv[1]);
    image = ReadImage(image_info,exception);
    if (exception->severity != UndefinedException)
        CatchException(exception);
    if (image == (Image *) NULL)
        exit(1);

    printf("rows = %ld, columns= %ld\n", image->rows, image->columns);

   imgbuf = (unsigned char
*)malloc(image->rows*image->columns*sizeof(char)*4);
    q = imgbuf;
    for(y=0; y < (long) image->rows; y++)
    {
        p = GetVirtualPixels(image, 0, y, image->columns, 1, exception);
        if( p == (const PixelPacket *)NULL )
            break;
        for( x = 0; x < (long) image->columns; x++)
        {
            *q = ScaleQuantumToChar(p->blue);
            q++;
            *q = ScaleQuantumToChar(p->green);
            q++;
            *q = ScaleQuantumToChar(p->red);
            q++;
            *q = ScaleQuantumToChar(p->opacity);
            q++;
            p++;
        }
    }

Is this the right way?

Juan Aranda

Thomas Stover wrote:
> A similar question came up on the gtk list the other day. Since you are 
> looking for a way to do it without using an additional library, this is 
> not your answer. However, I have been recommending people try 
> ImageMagick http://www.imagemagick.org/script/index.php for "non png" 
> file formats and misc raster operations such as resize as a supplement 
> to cairo. If you want my demo I can post it here.
>
> Out of curiosity, what are your reasons for not wanting another library? 
> I have seen allot of aversion to mixing libraries lately. As long as 
> licenses and technical details work out, to me that's how you bring some 
> real alchemy to the table.
>   
>> From: Tor Lillqvist <tml at iki.fi>
>> Subject: Re: [cairo] how to import .BMP without other libs(GTK+ etc)?
>>
>>   
>>     
>>> we could do it with GTK+. However, is there some other way to import BMP or
>>> dib in cairo without the suppot of other libs?
>>>     
>>>       
>> Not as far as I can see.
>>
>>   
>>     
>>> I had tried to do it whit cairo_image_surface_create_for_data, but failed. I could not see the right image.
>>>     
>>>       
>> Are you sure that the .bmp file you are reading actually is in a
>> (sub)format your code can handle? Didn't debugging (or adding
>> printouts...) tell you anything? There must be a lot of sample code
>> that reads .bmp out there, compare to the code of those... I know of
>> io-bmp.c in gtk+/gdk-pixbuf and GIMP's bmp-read.c.
>>
>> A "throwaway" program I wrote to dump the contents of a .bmp file is
>> at http://pastebin.com/m6e96721e . Unfortunately it compiles as such
>> only on Windows.
>>
>> --tml
>>
>>   
>>     
>
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cairographics.org/archives/cairo/attachments/20090204/397673e4/attachment.html 


More information about the cairo mailing list