image i/o */
| 687 | |
| 688 | /* image i/o */ |
| 689 | imageObj *agg2CreateImage(int width, int height, outputFormatObj *format, colorObj * bg) { |
| 690 | imageObj *image = NULL; |
| 691 | if (format->imagemode != MS_IMAGEMODE_RGB && format->imagemode != MS_IMAGEMODE_RGBA) { |
| 692 | msSetError(MS_MISCERR, |
| 693 | "AGG2 driver only supports RGB or RGBA pixel models.", "agg2CreateImage()"); |
| 694 | return image; |
| 695 | } |
| 696 | image = (imageObj *) calloc(1, sizeof (imageObj)); |
| 697 | MS_CHECK_ALLOC(image, sizeof (imageObj), NULL); |
| 698 | AGG2Renderer *r = new AGG2Renderer(); |
| 699 | |
| 700 | r->buffer = (band_type*)malloc(width * height * 4 * sizeof(band_type)); |
| 701 | if (r->buffer == NULL) |
| 702 | { |
| 703 | msSetError(MS_MEMERR, "%s: %d: Out of memory allocating %u bytes.\n", "agg2CreateImage()", |
| 704 | __FILE__, __LINE__, width * height * 4 * sizeof(band_type)); |
| 705 | free(image); |
| 706 | return NULL; |
| 707 | } |
| 708 | r->m_rendering_buffer.attach(r->buffer, width, height, width * 4); |
| 709 | r->m_pixel_format.attach(r->m_rendering_buffer); |
| 710 | r->m_renderer_base.attach(r->m_pixel_format); |
| 711 | r->m_renderer_scanline.attach(r->m_renderer_base); |
| 712 | if( bg && !format->transparent ) |
| 713 | r->m_renderer_base.clear(aggColor(bg)); |
| 714 | else |
| 715 | r->m_renderer_base.clear(AGG_NO_COLOR); |
| 716 | |
| 717 | if (!bg || format->transparent || format->imagemode == MS_IMAGEMODE_RGBA ) { |
| 718 | r->use_alpha = true; |
| 719 | } else { |
| 720 | r->use_alpha = false; |
| 721 | } |
| 722 | image->img.plugin = (void*) r; |
| 723 | |
| 724 | return image; |
| 725 | } |
| 726 | |
| 727 | int agg2SaveImage(imageObj *img, FILE *fp, outputFormatObj * format) { |
| 728 | msSetError(MS_MISCERR, "AGG2 does not support direct image saving", "agg2SaveImage()"); |
no test coverage detected