141{
142 switch (source_format)
143 {
147 {
151 UINT srcstride, srcdatasize;
159
162
165 else
167
169 res = IWICPalette_GetColors(
palette, 2, colors, &actualcolors);
170
173
174 srcstride = (
prc->Width+7)/8;
175 srcdatasize = srcstride *
prc->Height;
176
177 srcdata =
malloc(srcdatasize);
179
180 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
181
183 {
184 srcrow = srcdata;
185 dstrow = pbBuffer;
186 for (
y=0;
y<
prc->Height;
y++) {
187 srcbyte = srcrow;
188 dstpixel=(
DWORD*)dstrow;
189 for (
x=0;
x<
prc->Width;
x+=8) {
191 srcval=*srcbyte++;
192 *dstpixel++ = colors[srcval>>7&1];
193 if (
x+1 <
prc->Width) *dstpixel++ = colors[srcval>>6&1];
194 if (
x+2 <
prc->Width) *dstpixel++ = colors[srcval>>5&1];
195 if (
x+3 <
prc->Width) *dstpixel++ = colors[srcval>>4&1];
196 if (
x+4 <
prc->Width) *dstpixel++ = colors[srcval>>3&1];
197 if (
x+5 <
prc->Width) *dstpixel++ = colors[srcval>>2&1];
198 if (
x+6 <
prc->Width) *dstpixel++ = colors[srcval>>1&1];
199 if (
x+7 <
prc->Width) *dstpixel++ = colors[srcval&1];
200 }
201 srcrow += srcstride;
202 dstrow += cbStride;
203 }
204 }
205
207
209 }
214 {
218 UINT srcstride, srcdatasize;
226
229
232 else
234
236 res = IWICPalette_GetColors(
palette, 4, colors, &actualcolors);
237
240
241 srcstride = (
prc->Width+3)/4;
242 srcdatasize = srcstride *
prc->Height;
243
244 srcdata =
malloc(srcdatasize);
246
247 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
248
250 {
251 srcrow = srcdata;
252 dstrow = pbBuffer;
253 for (
y=0;
y<
prc->Height;
y++) {
254 srcbyte = srcrow;
255 dstpixel=(
DWORD*)dstrow;
256 for (
x=0;
x<
prc->Width;
x+=4) {
258 srcval=*srcbyte++;
259 *dstpixel++ = colors[srcval>>6];
260 if (
x+1 <
prc->Width) *dstpixel++ = colors[srcval>>4&0x3];
261 if (
x+2 <
prc->Width) *dstpixel++ = colors[srcval>>2&0x3];
262 if (
x+3 <
prc->Width) *dstpixel++ = colors[srcval&0x3];
263 }
264 srcrow += srcstride;
265 dstrow += cbStride;
266 }
267 }
268
270
272 }
277 {
281 UINT srcstride, srcdatasize;
289
292
295 else
297
299 res = IWICPalette_GetColors(
palette, 16, colors, &actualcolors);
300
303
304 srcstride = (
prc->Width+1)/2;
305 srcdatasize = srcstride *
prc->Height;
306
307 srcdata =
malloc(srcdatasize);
309
310 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
311
313 {
314 srcrow = srcdata;
315 dstrow = pbBuffer;
316 for (
y=0;
y<
prc->Height;
y++) {
317 srcbyte = srcrow;
318 dstpixel=(
DWORD*)dstrow;
319 for (
x=0;
x<
prc->Width;
x+=2) {
321 srcval=*srcbyte++;
322 *dstpixel++ = colors[srcval>>4];
323 if (
x+1 <
prc->Width) *dstpixel++ = colors[srcval&0xf];
324 }
325 srcrow += srcstride;
326 dstrow += cbStride;
327 }
328 }
329
331
333 }
337 {
341 UINT srcstride, srcdatasize;
346
347 srcstride =
prc->Width;
348 srcdatasize = srcstride *
prc->Height;
349
350 srcdata =
malloc(srcdatasize);
352
353 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
354
356 {
357 srcrow = srcdata;
358 dstrow = pbBuffer;
359 for (
y=0;
y<
prc->Height;
y++) {
360 srcbyte = srcrow;
361 dstpixel=(
DWORD*)dstrow;
362 for (
x=0;
x<
prc->Width;
x++)
363 {
364 *dstpixel++ = 0xff000000|(*srcbyte<<16)|(*srcbyte<<8)|*srcbyte;
365 srcbyte++;
366 }
367 srcrow += srcstride;
368 dstrow += cbStride;
369 }
370 }
371
373
375 }
379 {
383 UINT srcstride, srcdatasize;
391
394
397 res = IWICPalette_GetColors(
palette, 256, colors, &actualcolors);
398
400
402
403 srcstride =
prc->Width;
404 srcdatasize = srcstride *
prc->Height;
405
406 srcdata =
malloc(srcdatasize);
408
409 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
410
412 {
413 srcrow = srcdata;
414 dstrow = pbBuffer;
415 for (
y=0;
y<
prc->Height;
y++) {
416 srcbyte = srcrow;
417 dstpixel=(
DWORD*)dstrow;
418 for (
x=0;
x<
prc->Width;
x++)
419 *dstpixel++ = colors[*srcbyte++];
420 srcrow += srcstride;
421 dstrow += cbStride;
422 }
423 }
424
426
428 }
432 {
436 UINT srcstride, srcdatasize;
441
442 srcstride =
prc->Width * 2;
443 srcdatasize = srcstride *
prc->Height;
444
445 srcdata =
malloc(srcdatasize);
447
448 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
449
451 {
452 srcrow = srcdata;
453 dstrow = pbBuffer;
454 for (
y=0;
y<
prc->Height;
y++) {
455 srcbyte = srcrow;
456 dstpixel=(
DWORD*)dstrow;
457 for (
x=0;
x<
prc->Width;
x++)
458 {
459 srcbyte++;
460 *dstpixel++ = 0xff000000|(*srcbyte<<16)|(*srcbyte<<8)|*srcbyte;
461 srcbyte++;
462 }
463 srcrow += srcstride;
464 dstrow += cbStride;
465 }
466 }
467
469
471 }
475 {
479 UINT srcstride, srcdatasize;
481 const WORD *srcpixel;
484
485 srcstride = 2 *
prc->Width;
486 srcdatasize = srcstride *
prc->Height;
487
488 srcdata =
malloc(srcdatasize);
490
491 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
492
494 {
495 srcrow = srcdata;
496 dstrow = pbBuffer;
497 for (
y=0;
y<
prc->Height;
y++) {
498 srcpixel=(
const WORD*)srcrow;
499 dstpixel=(
DWORD*)dstrow;
500 for (
x=0;
x<
prc->Width;
x++) {
502 srcval=*srcpixel++;
503 *dstpixel++=0xff000000 |
504 ((srcval << 9) & 0xf80000) |
505 ((srcval << 4) & 0x070000) |
506 ((srcval << 6) & 0x00f800) |
507 ((srcval << 1) & 0x000700) |
508 ((srcval << 3) & 0x0000f8) |
509 ((srcval >> 2) & 0x000007);
510 }
511 srcrow += srcstride;
512 dstrow += cbStride;
513 }
514 }
515
517
519 }
523 {
527 UINT srcstride, srcdatasize;
529 const WORD *srcpixel;
532
533 srcstride = 2 *
prc->Width;
534 srcdatasize = srcstride *
prc->Height;
535
536 srcdata =
malloc(srcdatasize);
538
539 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
540
542 {
543 srcrow = srcdata;
544 dstrow = pbBuffer;
545 for (
y=0;
y<
prc->Height;
y++) {
546 srcpixel=(
const WORD*)srcrow;
547 dstpixel=(
DWORD*)dstrow;
548 for (
x=0;
x<
prc->Width;
x++) {
550 srcval=*srcpixel++;
551 *dstpixel++=0xff000000 |
552 ((srcval << 8) & 0xf80000) |
553 ((srcval << 3) & 0x070000) |
554 ((srcval << 5) & 0x00fc00) |
555 ((srcval >> 1) & 0x000300) |
556 ((srcval << 3) & 0x0000f8) |
557 ((srcval >> 2) & 0x000007);
558 }
559 srcrow += srcstride;
560 dstrow += cbStride;
561 }
562 }
563
565
567 }
571 {
575 UINT srcstride, srcdatasize;
577 const WORD *srcpixel;
580
581 srcstride = 2 *
prc->Width;
582 srcdatasize = srcstride *
prc->Height;
583
584 srcdata =
malloc(srcdatasize);
586
587 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
588
590 {
591 srcrow = srcdata;
592 dstrow = pbBuffer;
593 for (
y=0;
y<
prc->Height;
y++) {
594 srcpixel=(
const WORD*)srcrow;
595 dstpixel=(
DWORD*)dstrow;
596 for (
x=0;
x<
prc->Width;
x++) {
598 srcval=*srcpixel++;
599 *dstpixel++=((srcval & 0x8000) ? 0xff000000 : 0) |
600 ((srcval << 9) & 0xf80000) |
601 ((srcval << 4) & 0x070000) |
602 ((srcval << 6) & 0x00f800) |
603 ((srcval << 1) & 0x000700) |
604 ((srcval << 3) & 0x0000f8) |
605 ((srcval >> 2) & 0x000007);
606 }
607 srcrow += srcstride;
608 dstrow += cbStride;
609 }
610 }
611
613
615 }
619 {
623 UINT srcstride, srcdatasize;
625 const BYTE *srcpixel;
628
629 srcstride = 3 *
prc->Width;
630 srcdatasize = srcstride *
prc->Height;
631
632 srcdata =
malloc(srcdatasize);
634
635 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
636
638 {
639 srcrow = srcdata;
640 dstrow = pbBuffer;
641 for (
y=0;
y<
prc->Height;
y++) {
642 srcpixel=srcrow;
643 dstpixel=dstrow;
644 for (
x=0;
x<
prc->Width;
x++) {
645 *dstpixel++=*srcpixel++;
646 *dstpixel++=*srcpixel++;
647 *dstpixel++=*srcpixel++;
648 *dstpixel++=255;
649 }
650 srcrow += srcstride;
651 dstrow += cbStride;
652 }
653 }
654
656
658 }
662 {
666 UINT srcstride, srcdatasize;
668 const BYTE *srcpixel;
672
673 srcstride = 3 *
prc->Width;
674 srcdatasize = srcstride *
prc->Height;
675
676 srcdata =
malloc(srcdatasize);
678
679 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
680
682 {
683 srcrow = srcdata;
684 dstrow = pbBuffer;
685 for (
y=0;
y<
prc->Height;
y++) {
686 srcpixel=srcrow;
687 dstpixel=dstrow;
688 for (
x=0;
x<
prc->Width;
x++) {
689 tmppixel[0]=*srcpixel++;
690 tmppixel[1]=*srcpixel++;
691 tmppixel[2]=*srcpixel++;
692
693 *dstpixel++=tmppixel[2];
694 *dstpixel++=tmppixel[1];
695 *dstpixel++=tmppixel[0];
696 *dstpixel++=255;
697 }
698 srcrow += srcstride;
699 dstrow += cbStride;
700 }
701 }
702
704
706 }
710 {
713
714 res = IWICBitmapSource_CopyPixels(
This->source,
prc, cbStride, cbBufferSize, pbBuffer);
716
717
718 for (
y=0;
y<
prc->Height;
y++)
719 for (
x=0;
x<
prc->Width;
x++)
720 pbBuffer[cbStride*
y+4*
x+3] = 0xff;
721 }
725 {
727 res = IWICBitmapSource_CopyPixels(
This->source,
prc, cbStride, cbBufferSize, pbBuffer);
730 }
734 return IWICBitmapSource_CopyPixels(
This->source,
prc, cbStride, cbBufferSize, pbBuffer);
738 {
741
742 res = IWICBitmapSource_CopyPixels(
This->source,
prc, cbStride, cbBufferSize, pbBuffer);
744
745 for (
y=0;
y<
prc->Height;
y++)
746 for (
x=0;
x<
prc->Width;
x++)
747 {
750 {
751 pbBuffer[cbStride*
y+4*
x] = pbBuffer[cbStride*
y+4*
x] * 255 /
alpha;
752 pbBuffer[cbStride*
y+4*
x+1] = pbBuffer[cbStride*
y+4*
x+1] * 255 /
alpha;
753 pbBuffer[cbStride*
y+4*
x+2] = pbBuffer[cbStride*
y+4*
x+2] * 255 /
alpha;
754 }
755 }
756 }
760 {
764 UINT srcstride, srcdatasize;
766 const BYTE *srcpixel;
769
770 srcstride = 6 *
prc->Width;
771 srcdatasize = srcstride *
prc->Height;
772
773 srcdata =
malloc(srcdatasize);
775
776 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
777
779 {
780 srcrow = srcdata;
781 dstrow = pbBuffer;
782 for (
y=0;
y<
prc->Height;
y++) {
783 srcpixel=srcrow;
784 dstpixel=(
DWORD*)dstrow;
785 for (
x=0;
x<
prc->Width;
x++) {
787 srcpixel++;
red = *srcpixel++;
788 srcpixel++;
green = *srcpixel++;
789 srcpixel++;
blue = *srcpixel++;
791 }
792 srcrow += srcstride;
793 dstrow += cbStride;
794 }
795 }
796
798
800 }
804 {
808 UINT srcstride, srcdatasize;
810 const BYTE *srcpixel;
813
814 srcstride = 8 *
prc->Width;
815 srcdatasize = srcstride *
prc->Height;
816
817 srcdata =
malloc(srcdatasize);
819
820 res = IWICBitmapSource_CopyPixels(
This->source,
prc, srcstride, srcdatasize, srcdata);
821
823 {
824 srcrow = srcdata;
825 dstrow = pbBuffer;
826 for (
y=0;
y<
prc->Height;
y++) {
827 srcpixel=srcrow;
828 dstpixel=(
DWORD*)dstrow;
829 for (
x=0;
x<
prc->Width;
x++) {
831 srcpixel++;
red = *srcpixel++;
832 srcpixel++;
green = *srcpixel++;
833 srcpixel++;
blue = *srcpixel++;
834 srcpixel++;
alpha = *srcpixel++;
836 }
837 srcrow += srcstride;
838 dstrow += cbStride;
839 }
840 }
841
843
845 }
849 {
852
853 res = IWICBitmapSource_CopyPixels(
This->source,
prc, cbStride, cbBufferSize, pbBuffer);
855
856 for (
y=0;
y<
prc->Height;
y++)
857 for (
x=0;
x<
prc->Width;
x++)
858 {
859 BYTE *pixel = pbBuffer+cbStride*
y+4*
x;
860 BYTE c=pixel[0],
m=pixel[1],
y=pixel[2],
k=pixel[3];
861 pixel[0] = (255-
y)*(255-
k)/255;
862 pixel[1] = (255-
m)*(255-
k)/255;
863 pixel[2] = (255-
c)*(255-
k)/255;
864 pixel[3] = 255;
865 }
866 }
868 default:
869 FIXME(
"Unimplemented conversion path!\n");
871 }
872}
HRESULT PaletteImpl_Create(IWICPalette **palette)
GLclampf GLclampf GLclampf alpha
@ WICBitmapPaletteTypeFixedBW
@ WICBitmapPaletteTypeFixedGray16
@ WICBitmapPaletteTypeFixedGray4