/[projet1]/public/pc/tools/osdk/main/pictconv/sources/oric_converter_colored.cpp
Defence Force logotype

Diff of /public/pc/tools/osdk/main/pictconv/sources/oric_converter_colored.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1259 by dbug, Sat Feb 1 14:47:09 2014 UTC revision 1260 by dbug, Sat Feb 14 20:26:49 2015 UTC
# Line 34  int gmax_count=0; Line 34  int gmax_count=0;
34    
35  bool FlagDebug=false;  bool FlagDebug=false;
36    
 /*  
 - u8: nombre de couleurs sur le bloc (1, 2, ou invalide)  
 - u8: couleur 1  
 - u8: couleur 2  
 - u8: flag (inverse vidéo possible, ...)  
 */  
 struct BLOC6  
 {  
   unsigned char color_count;  
   unsigned char color[2];  
   unsigned char value;  
 };  
   
37    
38  BLOC6   Bloc6Buffer[40];        // For 240 pixel wide pictures  BlocOf6 Bloc6Buffer[40];        // For 240 pixel wide pictures
39    
40    
41  /*  /*
# Line 77  Changement de papier d'une couleur inver Line 64  Changement de papier d'une couleur inver
64    
65    
66    
67  bool RecurseLine(unsigned char count,BLOC6 *ptr_bloc6,unsigned char *ptr_hires,unsigned char cur_paper,unsigned char cur_ink)  bool RecurseLine(unsigned char count,BlocOf6 *ptr_bloc6,unsigned char *ptr_hires,ORIC_COLOR cur_paper,ORIC_COLOR cur_ink)
68  {  {
69    PtrSpaces-=2;    PtrSpaces-=2;
70    
# Line 121  bool RecurseLine(unsigned char count,BLO Line 108  bool RecurseLine(unsigned char count,BLO
108    }    }
109    
110    unsigned char color_count=ptr_bloc6->color_count;    unsigned char color_count=ptr_bloc6->color_count;
111    unsigned char c0=ptr_bloc6->color[0];    ORIC_COLOR    c0=ptr_bloc6->colors[0];
112    unsigned char c1=ptr_bloc6->color[1];    ORIC_COLOR    c1=ptr_bloc6->colors[1];
113    unsigned char v =ptr_bloc6->value;    unsigned char v =ptr_bloc6->value;
114    
115    
# Line 153  bool RecurseLine(unsigned char count,BLO Line 140  bool RecurseLine(unsigned char count,BLO
140        }        }
141    
142        // Try each of the 8 possible ink colors        // Try each of the 8 possible ink colors
143        for (unsigned char color=0;color<8;color++)        for (ORIC_COLOR color=ORIC_COLOR_BLACK;color<_ORIC_COLOR_LAST_;color++)
144        {        {
145          if (FlagDebug)  printf("\r\n %sUse paper color (%d) while changing ink color to (%d)",PtrSpaces,cur_paper,color);          if (FlagDebug)  printf("\r\n %sUse paper color (%d) while changing ink color to (%d)",PtrSpaces,cur_paper,color);
146          if (RecurseLine(count,ptr_bloc6,ptr_hires,cur_paper,color))          if (RecurseLine(count,ptr_bloc6,ptr_hires,cur_paper,color))
147          {          {
148            ptr_hires[-1]=color;            ptr_hires[-1]=(unsigned char)color;
149            return true;            return true;
150          }          }
151        }        }
# Line 191  bool RecurseLine(unsigned char count,BLO Line 178  bool RecurseLine(unsigned char count,BLO
178        }        }
179    
180        // Try each of the 8 possible ink colors        // Try each of the 8 possible ink colors
181        for (unsigned char color=0;color<8;color++)        for (ORIC_COLOR color=ORIC_COLOR_BLACK;color<_ORIC_COLOR_LAST_;color++)
182        {        {
183          if (FlagDebug)  printf("\r\n %sUse inverted paper color (%d => %d) while changing ink color to (%d)",PtrSpaces,cur_paper,7-cur_paper,color);          if (FlagDebug)  printf("\r\n %sUse inverted paper color (%d => %d) while changing ink color to (%d)",PtrSpaces,cur_paper,7-cur_paper,color);
184          if (RecurseLine(count,ptr_bloc6,ptr_hires,cur_paper,color))          if (RecurseLine(count,ptr_bloc6,ptr_hires,cur_paper,color))
185          {          {
186            ptr_hires[-1]=128|color;            ptr_hires[-1]=(unsigned char)(128|color);
187            return true;            return true;
188          }          }
189        }        }
# Line 217  bool RecurseLine(unsigned char count,BLO Line 204  bool RecurseLine(unsigned char count,BLO
204      if (FlagDebug)      printf("\r\n %sChange paper color to (%d)",PtrSpaces,c0);      if (FlagDebug)      printf("\r\n %sChange paper color to (%d)",PtrSpaces,c0);
205      if (RecurseLine(count,ptr_bloc6,ptr_hires,c0,cur_ink))      if (RecurseLine(count,ptr_bloc6,ptr_hires,c0,cur_ink))
206      {      {
207        ptr_hires[-1]=16+c0;        ptr_hires[-1]=(unsigned char)(16+c0);
208        return true;        return true;
209      }      }
210    
211    
212      // Change paper color, using inverse vidéo      // Change paper color, using inverse video
213      if (FlagDebug)      printf("\r\n %sChange paper color to (%d) using inversion (%d)",PtrSpaces,7-c0,c0);      if (FlagDebug)      printf("\r\n %sChange paper color to (%d) using inversion (%d)",PtrSpaces,7-c0,c0);
214      if (RecurseLine(count,ptr_bloc6,ptr_hires,7-c0,cur_ink))      if (RecurseLine(count,ptr_bloc6,ptr_hires,ORIC_COLOR_WHITE-c0,cur_ink))
215      {      {
216        ptr_hires[-1]=128|16+(7-c0);        ptr_hires[-1]=(unsigned char)(128|16+(7-c0));
217        return true;        return true;
218      }      }
219    }    }
# Line 310  void OricPictureConverter::convert_color Line 297  void OricPictureConverter::convert_color
297        printf("\r\nLine %d ",y);        printf("\r\nLine %d ",y);
298      }      }
299    
300      BLOC6 *ptr_bloc6=Bloc6Buffer;      BlocOf6 *ptr_bloc6=Bloc6Buffer;
301      bool error_in_line=false;      bool error_in_line=false;
302    
303      //      //
# Line 322  void OricPictureConverter::convert_color Line 309  void OricPictureConverter::convert_color
309        bool error_in_bloc=false;        bool error_in_bloc=false;
310    
311        // Init that bloc        // Init that bloc
312        ptr_bloc6->color_count=0;        ptr_bloc6->Clear();
       ptr_bloc6->color[0]=0;  
       ptr_bloc6->color[1]=0;  
       ptr_bloc6->value=0;  
313    
314        for (int bit=0;bit<6;bit++)        for (int bit=0;bit<6;bit++)
315        {        {
         ptr_bloc6->value<<=1;  
316    
317          // Get the original pixel color          // Get the original pixel color
318          BYTE *ptr_byte=FreeImage_GetBitsRowCol(convertedPicture.GetBitmap(),x,y);          BYTE *ptr_byte=FreeImage_GetBitsRowCol(convertedPicture.GetBitmap(),x,y);
319          unsigned char color=0;          ORIC_COLOR color=ORIC_COLOR_BLACK;
320          if ((*ptr_byte++)>128)  color|=4;          if ((*ptr_byte++)>128)  color|=ORIC_COLOR_BLUE;
321          if ((*ptr_byte++)>128)  color|=2;          if ((*ptr_byte++)>128)  color|=ORIC_COLOR_GREEN;
322          if ((*ptr_byte++)>128)  color|=1;          if ((*ptr_byte++)>128)  color|=ORIC_COLOR_RED;
323    
324            error_in_bloc|=ptr_bloc6->AddColor(color);
325    
         // Check if it's already present in the color map  
         switch (ptr_bloc6->color_count)  
         {  
         case 0:  
           ptr_bloc6->color_count++;  
           ptr_bloc6->color[0]=color;  
           ptr_bloc6->color[1]=color;    // To avoid later tests  
           break;  
   
         case 1:  
           if (ptr_bloc6->color[0]!=color)  
           {  
             // one more color  
             ptr_bloc6->color_count++;  
             ptr_bloc6->color[1]=color;  
             ptr_bloc6->value|=1;  
           }  
           break;  
   
         case 2:  
           if (ptr_bloc6->color[0]!=color)  
           {  
             if (ptr_bloc6->color[1]==color)  
             {  
               // second color  
               ptr_bloc6->value|=1;  
             }  
             else  
             {  
               // color overflow !!!  
               ptr_bloc6->color_count++;  
   
               error_in_bloc=true;  
             }  
           }  
           break;  
         }  
326          x++;          x++;
327        }        }
328    
# Line 411  void OricPictureConverter::convert_color Line 359  void OricPictureConverter::convert_color
359        //__asm int 3;        //__asm int 3;
360      }      }
361  #endif  #endif
362      if (RecurseLine((unsigned char)m_Buffer.m_buffer_cols,ptr_bloc6,ptr_hires,0,7))      if (RecurseLine((unsigned char)m_Buffer.m_buffer_cols,ptr_bloc6,ptr_hires,ORIC_COLOR_BLACK,ORIC_COLOR_WHITE))
363        //if (RecurseLine(7,ptr_bloc6,ptr_hires,0,7))        //if (RecurseLine(7,ptr_bloc6,ptr_hires,0,7))
364      {      {
365        //        //

Legend:
Removed from v.1259  
changed lines
  Added in v.1260

  ViewVC Help
Powered by ViewVC 1.1.26