PA_Draw_Sim.c
上传用户:holyzs
上传日期:2022-06-29
资源大小:2335k
文件大小:2k
源码类别:

编辑器/阅读器

开发平台:

C/C++

  1. #include <reader_core.h>
  2. void PA_LoadBmpToBuffer(u16 *Buffer, s16 x, s16 y, void *bmp, s16 SWidth){
  3. u8 *temp = (u8*)bmp;
  4. BMPHeader0 *Bmpinfo0 = (BMPHeader0 *) (temp);
  5. BMP_Headers *Bmpinfo = (BMP_Headers*)(temp+14);
  6. // u8 *gfx = temp+54;
  7.   u32 start = Bmpinfo0->ImageStart1 + ((Bmpinfo0->ImageStart2)<<16);
  8. u8 *gfx = temp+start;
  9. u16 *gfx2 = (u16*)(temp+start);
  10. // u16 *gfx2 = (u16*)(temp+54); // Pour le mode 16 bit...
  11. s32 r, g, b;  s16 tempx, tempy;
  12. s16 lx = Bmpinfo->Width;   s16 ly = Bmpinfo->Height;
  13. u16 Bits = Bmpinfo->BitsperPixel;
  14. //Buffer = (u16*)(Buffer + ((x + (y*SWidth)) << 1)); // Position de d閜art
  15. s32 i = 0;
  16. if (Bits > 16){ // Pour 24 et 32 bits
  17. for (tempy = ly-1; tempy > -1; tempy--){
  18. for (tempx = 0; tempx < lx; tempx++){
  19. b = (gfx[i] >> 3)&31; i++;
  20. g = (gfx[i] >> 3)&31; i++;
  21. r = (gfx[i] >> 3)&31; i++;
  22. if (Bits == 32) i++; // On passe le bit alpha
  23. //PA_Put16bitPixel(screen, x + tempx, y + tempy, PA_RGB(r, g, b));
  24. Buffer[x + tempx + ((y + tempy) * SWidth)] = PA_RGB(r, g, b);
  25. }
  26. while(i&3) i++; // Padding....
  27. }
  28. }
  29. else if (Bits == 16){
  30.     s32 temp;
  31. for (tempy = ly-1; tempy > -1; tempy--){
  32. for (tempx = 0; tempx < lx; tempx++){
  33. b = *gfx2&31;
  34. g = (*gfx2>>5)&31;
  35. r = (*gfx2>>10)&31;
  36. //PA_Put16bitPixel(screen, x + tempx, y + tempy, PA_RGB(r, g, b));
  37. Buffer[x + tempx + ((y + tempy) * SWidth)] = PA_RGB(r, g, b);
  38. gfx2++; // On passe au pixel suivant
  39. }
  40. temp = (s32)gfx2;
  41. while(temp&3) temp++; // Padding....
  42. gfx2 = (u16*)temp;
  43. }
  44. }
  45. if (Bits == 8) {
  46. // look for palette data if present //
  47. u8 *colormap = temp+14+Bmpinfo->SizeofHeader;
  48. u16 palette[256];
  49.     s32 colors;
  50.     if (Bmpinfo->NColors != 0) {
  51.       colors = Bmpinfo->NColors & 0xff;
  52.     } else {
  53.       colors = 256;
  54.     }
  55. for(i = 0; i < colors; i++) {
  56. b = ((colormap[(i<<2)+0])>>3)&31;
  57. g = ((colormap[(i<<2)+1])>>3)&31;
  58. r = ((colormap[(i<<2)+2])>>3)&31;
  59. palette[i] = PA_RGB(r, g, b);
  60. }
  61.     i = 0;
  62. for (tempy = ly-1; tempy > -1; tempy--){
  63. for (tempx = 0; tempx < lx; tempx++){
  64. Buffer[x + tempx + ((y + tempy) * SWidth)] =  palette[gfx[i]];
  65. i++;
  66. }
  67. }
  68. }
  69. }