/** * Get information about an image. * * @param id Image to query. * @param pii Destination for image information. * @return TRUE on success, FALSE on error. */ MWBOOL GdGetImageInfo(int id, PMWIMAGEINFO pii) { PMWIMAGEHDR pimage; PIMAGEITEM pItem; int i; pItem = findimage(id); if (!pItem) { memset(pii, 0, sizeof(*pii)); return FALSE; } pimage = pItem->pimage; pii->id = id; pii->width = pimage->width; pii->height = pimage->height; pii->planes = pimage->planes; pii->bpp = pimage->bpp; pii->pitch = pimage->pitch; pii->bytesperpixel = pimage->bytesperpixel; pii->compression = pimage->compression; pii->palsize = pimage->palsize; if (pimage->palsize) { if (pimage->palette) { for (i=0; i<pimage->palsize; ++i) pii->palette[i] = pimage->palette[i]; } else { /* FIXME handle jpeg's without palette*/ GdGetPalette(pItem->psd, 0, pimage->palsize, pii->palette); } } return TRUE; }
/* return RGB value at specified coordinates*/ COLORREF WINAPI GetPixel(HDC hdc, int x, int y) { HWND hwnd; POINT pt; MWPIXELVAL pixel; MWPALENTRY rgb; hwnd = MwPrepareDC(hdc); if(!hwnd) return CLR_INVALID; pt.x = x; pt.y = y; if(MwIsClientDC(hdc)) ClientToScreen(hwnd, &pt); /* read pixel value*/ GdReadArea(hdc->psd, pt.x, pt.y, 1, 1, &pixel); switch(hdc->psd->pixtype) { case MWPF_TRUECOLOR0888: case MWPF_TRUECOLOR888: /* create RGB colorval from 8/8/8 pixel*/ return PIXEL888TOCOLORVAL(pixel); case MWPF_TRUECOLOR565: /* create RGB colorval from 5/6/5 pixel*/ return PIXEL565TOCOLORVAL(pixel); case MWPF_TRUECOLOR555: /* create RGB colorval from 5/5/5 pixel*/ return PIXEL555TOCOLORVAL(pixel); case MWPF_TRUECOLOR332: /* create RGB colorval from 3/3/2 pixel*/ return PIXEL332TOCOLORVAL(pixel); case MWPF_TRUECOLOR233: /* create RGB colorval from 2/3/3 pixel*/ return PIXEL233TOCOLORVAL(pixel); case MWPF_PALETTE: if(GdGetPalette(hdc->psd, pixel, 1, &rgb)) return RGB(rgb.r, rgb.g, rgb.b); } return CLR_INVALID; }
UINT WINAPI GetSystemPaletteEntries(HDC hdc,UINT iStartIndex,UINT nEntries, LPPALETTEENTRY lppe) { UINT i; MWPALENTRY rgb; /* currently, we only work for screen device*/ if(!hdc || hdc->psd != &scrdev) return 0; for(i=0; i<nEntries; ++i) { if(!GdGetPalette(hdc->psd, i+iStartIndex, 1, &rgb)) break; lppe->peRed = rgb.r; lppe->peGreen = rgb.g; lppe->peBlue = rgb.b; lppe->peFlags = 0; ++lppe; } return i; }