MCPcopy Create free account
hub / github.com/DentonW/DevIL / Cut

Function Cut

DevIL/src-IL/src/il_quantizer.cpp:336–389  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

334
335
336ILint Cut(Box *set1, Box *set2)
337{
338 ILubyte dir;
339 ILint cutr, cutg, cutb;
340 ILfloat maxr, maxg, maxb;
341 ILint whole_r, whole_g, whole_b, whole_w;
342
343 whole_r = Vol(set1, mr);
344 whole_g = Vol(set1, mg);
345 whole_b = Vol(set1, mb);
346 whole_w = Vol(set1, wt);
347
348 maxr = Maximize(set1, RED, set1->r0+1, set1->r1, &cutr, whole_r, whole_g, whole_b, whole_w);
349 maxg = Maximize(set1, GREEN, set1->g0+1, set1->g1, &cutg, whole_r, whole_g, whole_b, whole_w);
350 maxb = Maximize(set1, BLUE, set1->b0+1, set1->b1, &cutb, whole_r, whole_g, whole_b, whole_w);
351
352 if ((maxr >= maxg) && (maxr >= maxb)) {
353 dir = RED;
354 if (cutr < 0)
355 return 0; // can't split the Box
356 }
357 else if ((maxg >= maxr) && (maxg >= maxb))
358 dir = GREEN;
359 else
360 dir = BLUE;
361
362 set2->r1 = set1->r1;
363 set2->g1 = set1->g1;
364 set2->b1 = set1->b1;
365
366 switch (dir)
367 {
368 case RED:
369 set2->r0 = set1->r1 = cutr;
370 set2->g0 = set1->g0;
371 set2->b0 = set1->b0;
372 break;
373 case GREEN:
374 set2->g0 = set1->g1 = cutg;
375 set2->r0 = set1->r0;
376 set2->b0 = set1->b0;
377 break;
378 case BLUE:
379 set2->b0 = set1->b1 = cutb;
380 set2->r0 = set1->r0;
381 set2->g0 = set1->g0;
382 break;
383 }
384
385 set1->vol = (set1->r1-set1->r0) * (set1->g1-set1->g0) * (set1->b1-set1->b0);
386 set2->vol = (set2->r1-set2->r0) * (set2->g1-set2->g0) * (set2->b1-set2->b0);
387
388 return 1;
389}
390
391
392void Mark(struct Box *cube, int label, unsigned char *tag)

Callers 1

iQuantizeImageFunction · 0.85

Calls 2

VolFunction · 0.85
MaximizeFunction · 0.85

Tested by

no test coverage detected