Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2009, 20:51   #1
buser
Новичок
Джуниор
 
Регистрация: 24.03.2009
Сообщений: 1
По умолчанию Вопрос по извлечению графики

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

const int CSIZE = 6*1024*1024;
unsigned char Data[CSIZE]; 

int main(int argc, char * argv[])
{
  int    i, j, n, c, size, xres, yres, bpp;
  char    szImage[] = "img000.tga";
  FILE   * f1;
  FILE   * f2;

  if ((f1 = fopen("i7_rs.bin", "rb")) != 0)
  {
    size = fread(&Data, 1, CSIZE, f1);
    fclose(f1);
  }
  else
  {
    printf( "ERROR: i7_rs.bin not found\n" );
    return 1;
  }

  c = 0;
  n = 0;

  while (c+4<size)
  {
    bpp = 1;
    if (Data[c] == 16)
    {
      bpp = 2;
    }
    else
    if ((Data[c] >= 16) && (Data[c] <= 18))
    {
      bpp = 4;
    }
    xres = Data[c+1] + (Data[c+2] << 8);
    yres = Data[c+3] + (Data[c+4] << 8);

    if ((bpp == 1) || (xres == 0) || (xres > 160) || (yres == 0) || (yres > 128))
    {
      c++;
    }
    else
    {
      unsigned short TGAheader[9] = {0,2,0,0,0,0,xres,yres,2080};
      unsigned int   p0, p1, r, g, b, a, col;

      szImage[3] = '0'+((n/100)%10);
      szImage[4] = '0'+((n/10)%10);
      szImage[5] = '0'+(n%10);

      printf( "0x%6X: %s  [%dx%d] (%d bit)\n", c, szImage, xres, yres, Data[c] );

      if ((f2 = fopen(szImage, "wb")) != 0) 
      {
        fwrite(&TGAheader, sizeof(TGAheader), 1, f2);
        if (bpp == 2)
        {
          for (j=0; j<yres; j++)
          for (i=0; i<xres; i++)
          {
            p0 = Data[c+5+(yres-1-j)*xres*2+i*2];
            p1 = Data[c+5+(yres-1-j)*xres*2+i*2+1];
           
			r  = (p1 & 0xF8);
			g  = ((p1 & 0x07) << 5) + ((p0 & 0xE0) >> 3);
			b  = (p0 & 0x1F) << 3;
			a = 0xFF;
			if( g == 0xFC && r==0 && b==0)
				a = 0;
	
            col =  (a<<24) + (r<<16) + (g<<8) + b;

            fwrite(&col, 4, 1, f2);
          }
        }
        else
        {
          for (j=0; j<yres; j++)
		  {
            fwrite(&Data[c+5+(yres-1-j)*xres*4], xres*4, 1, f2);
		  }
        }
        fclose(f2);
      }
      c += xres*yres*bpp+5;
      n++;
    }
  }
  printf("\nOK\n");

  return 0;
}
Что подправить чтобы правильно извлекал 18 битные изображения с 262144 цветом в разрешении 160х128?

Спасибо.

Последний раз редактировалось MaTBeu; 25.03.2009 в 22:46.
buser вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графики Slavik Microsoft Office Excel 13 20.03.2009 15:45
Графики.... a_n_n_a Помощь студентам 4 08.03.2009 04:20
Графики в БД ~LiS~ БД в Delphi 1 05.06.2008 22:19
графики ZhekON Помощь студентам 6 10.04.2008 18:14
Графики delphin100 Общие вопросы Delphi 6 16.03.2008 10:40