| 397 | |
| 398 | |
| 399 | ILimage *iNeuQuant(ILimage *Image, ILuint NumCols) |
| 400 | { |
| 401 | ILimage *TempImage, *NewImage; |
| 402 | ILuint sample, i, j; |
| 403 | |
| 404 | netsizethink=NumCols; |
| 405 | |
| 406 | NewImage = iCurImage; |
| 407 | iCurImage = Image; |
| 408 | TempImage = iConvertImage(iCurImage, IL_BGR, IL_UNSIGNED_BYTE); |
| 409 | iCurImage = NewImage; |
| 410 | sample = ilGetInteger(IL_NEU_QUANT_SAMPLE); |
| 411 | |
| 412 | if (TempImage == NULL) |
| 413 | return NULL; |
| 414 | |
| 415 | initnet(TempImage->Data, TempImage->SizeOfData, sample); |
| 416 | learn(); |
| 417 | unbiasnet(); |
| 418 | |
| 419 | NewImage = (ILimage*)icalloc(sizeof(ILimage), 1); |
| 420 | if (NewImage == NULL) { |
| 421 | ilCloseImage(TempImage); |
| 422 | return NULL; |
| 423 | } |
| 424 | NewImage->Data = (ILubyte*)ialloc(TempImage->SizeOfData / 3); |
| 425 | if (NewImage->Data == NULL) { |
| 426 | ilCloseImage(TempImage); |
| 427 | ifree(NewImage); |
| 428 | return NULL; |
| 429 | } |
| 430 | ilCopyImageAttr(NewImage, Image); |
| 431 | NewImage->Bpp = 1; |
| 432 | NewImage->Bps = Image->Width; |
| 433 | NewImage->SizeOfPlane = NewImage->Bps * Image->Height; |
| 434 | NewImage->SizeOfData = NewImage->SizeOfPlane; |
| 435 | NewImage->Format = IL_COLOUR_INDEX; |
| 436 | NewImage->Type = IL_UNSIGNED_BYTE; |
| 437 | |
| 438 | NewImage->Pal.PalSize = netsizethink * 3; |
| 439 | NewImage->Pal.PalType = IL_PAL_BGR24; |
| 440 | NewImage->Pal.Palette = (ILubyte*)ialloc(256*3); |
| 441 | if (NewImage->Pal.Palette == NULL) { |
| 442 | ilCloseImage(TempImage); |
| 443 | ilCloseImage(NewImage); |
| 444 | return NULL; |
| 445 | } |
| 446 | |
| 447 | for (i = 0, j = 0; i < (unsigned)netsizethink; i++, j += 3) { |
| 448 | NewImage->Pal.Palette[j ] = network[i][0]; |
| 449 | NewImage->Pal.Palette[j+1] = network[i][1]; |
| 450 | NewImage->Pal.Palette[j+2] = network[i][2]; |
| 451 | } |
| 452 | |
| 453 | inxbuild(); |
| 454 | for (i = 0, j = 0; j < TempImage->SizeOfData; i++, j += 3) { |
| 455 | NewImage->Data[i] = inxsearch( |
| 456 | TempImage->Data[j], TempImage->Data[j+1], TempImage->Data[j+2]); |
no test coverage detected