Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в пустой строке 
V
    Опции темы
M-Xander
Дата 5.1.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.1.2008

Репутация: нет
Всего: нет



Здравствуйте!

Программа должна работать с файлом *.pcx . Однако при линковке возникает ошибка, которая находится в пустой строке, следующей за последней сторокой кода.
Используемая версия Студии 6.0.
На более новых версиях всё отлично компилится и работает.
Код прилагается.

Посоветуйте пожалуйста как избавиться от такой досадной ошибки!

Код


#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include "PCX_IO.h"

#define UCHAR  unsigned char
#define BYTE   unsigned char


static int align_to_word(int value)
{
  return value+=(value%2);
}



static unsigned short int Swap(unsigned short int i) 
{
    #ifdef __SUN__
        return (unsigned short int) (i >> 8) + (i << 8);
    #else
        return i;
    #endif
}


static void makeSunHeader(struct PCXHeader *Header)
{ 
  Header->X1 = Swap(Header->X1);
  Header->Y1 = Swap(Header->Y1);
  Header->X2 = Swap(Header->X2);
  Header->Y2 = Swap(Header->Y2);

  Header->HResolution = Swap(Header->HResolution);
  Header->VResolution = Swap(Header->VResolution);

  Header->BytePerLine  = Swap(Header->BytePerLine);
  Header->PaletteInfo  = Swap(Header->PaletteInfo);
  Header->SHResolution = Swap(Header->SHResolution);
  Header->SVResolution = Swap(Header->SVResolution);
}


unsigned char* ReadPCX(char Name[], int *XSize, int *YSize)
{
  FILE            *f;
  long            i = 0;
  struct PCXHeader Header;
  long               PackedImageSize;
  UCHAR            *PackedImage;
  UCHAR            *PackedBytes;
  long            PackCount;
  long            sizeX;
  int               GrayWidth,j;
  unsigned char*   lpGrayDIB;
  unsigned char*   Image;
  unsigned int     j1;

  if (!(f = fopen(Name, "rb"))) {
    printf("File not found\n"); return NULL;
  }
  fread(&Header, sizeof(struct PCXHeader), 1, f);

#ifdef __SUN__
  makeSunHeader (&Header);
#endif

  if (Header.PlanesNumber != 1 || Header.BitPerPixel != 8 || Header.ZsoftSign != 10 || Header.Version != 5) {
    fclose(f);
    printf("File isn't a Grayscale og 256-inexed color PCX file\n");
    return NULL;
  }
  *YSize = Header.Y2 - Header.Y1 + 1;
  if ((*XSize = Header.X2 - Header.X1 + 1) % 4) 
        sizeX = (long)(*XSize / 4) * 4 + 4; 
  else  sizeX = *XSize;
  fseek(f, 0, SEEK_END);
  PackedImageSize = ftell(f);
  if (!(   (PackedImage = (unsigned char *) malloc(PackedImageSize+100))
        && (lpGrayDIB   = (unsigned char *) malloc(sizeX * *YSize ))
        && (Image       = (unsigned char *) malloc(*XSize * *YSize)))){
    fclose(f);
    free(PackedImage);
    free(lpGrayDIB);
    printf("Can not allocate memory for buffer\n");
    return NULL;
  }
  fseek(f, sizeof(struct PCXHeader), SEEK_SET);
  fread(PackedImage, PackedImageSize, 1, f);
  PackedBytes = PackedImage;
  GrayWidth   = *XSize + (*XSize % 2);

  for (i = 0; i < *YSize; i++)    {
    j1 = 0;
    while (j1 < (unsigned long) Header.BytePerLine)
      if (*PackedBytes > (BYTE)191) {                // why ? 
        PackCount = *(PackedBytes++) ^ (unsigned char) 0xC0;
        memset(&(lpGrayDIB[i * GrayWidth + j1]), (int)* (PackedBytes++),PackCount);
        j1 += PackCount;
      }
      else {
        lpGrayDIB[i * GrayWidth + j1] = *(PackedBytes++); j1++;
      }
  }
  free(PackedImage);
  if (Header.PaletteInfo == 2) 
    for (i = 0; i < *YSize; i++)
      for (j = 0 ; j < *XSize; j++)        
        Image[i * (*XSize) + j] = lpGrayDIB[i * GrayWidth + j];
  else {
    unsigned char Palette[768];
    unsigned long IndexOfColor;
    double          Gray;
    fseek(f, PackedImageSize - 768, SEEK_SET);
    fread( Palette, 768, 1, f );   
    for (i = 0; i < *YSize; i++)
      for (j = 0 ; j < *XSize; j++){
        IndexOfColor = lpGrayDIB[i * GrayWidth + j] * 3;
        Gray = 0.299 * Palette[IndexOfColor   ] + 
               0.587 * Palette[IndexOfColor + 1] + 
               0.114 * Palette[IndexOfColor + 2];
        if (Gray > 255.0) Gray = 255.0;
        else if (Gray < 0.0) Gray = 0.0;
        Image[i * (*XSize) + j] = (unsigned char) (Gray + 0.5);
      }
  }
  fclose(f);
  free(lpGrayDIB);
  return Image;
}


static void makeHeader(struct PCXHeader *Header, int XSize, int YSize, int planesNumber, int bytePerLine, int paletteInfo)
{
 // int i;
  Header->ZsoftSign    = 0x0a;
  Header->Version      = 5;
  Header->GroupCoding  = 1;
  Header->BitPerPixel  = 8;
  Header->X1           = 0;
  Header->Y1           = 0;
  Header->X2           = (unsigned short int)(XSize - 1);   
  Header->Y2           = (unsigned short int)(YSize - 1);
  Header->HResolution  = (unsigned short int) XSize;   
  Header->VResolution  = (unsigned short int) YSize;   
  Header->SHResolution = (unsigned short int) XSize;   
  Header->SVResolution = (unsigned short int) YSize;    
  Header->PlanesNumber = (UCHAR) planesNumber;   
  Header->BytePerLine  = (unsigned short int)bytePerLine;   
  Header->PaletteInfo  = (unsigned short) paletteInfo;
  Header->VideoMode    = 1;
  memset(Header->EGAPalette,0,48);
  memset(Header->Reserve,0,54);
}



static void writeChannelLine(FILE *f, UCHAR *Image, int XSize, long int line)
{
  long int i;
  UCHAR    data, cnt;

  for (i=0; i < XSize;fwrite(&data,1,1,f)) {
    for (data=Image[i+line*XSize],cnt=1; ((i+cnt)<XSize && data == Image[i+cnt+XSize*line] &&cnt<63); cnt++);
    i += cnt;
    if (cnt > 1 || data >= 0xc0){
      cnt |= 0xc0;
      fwrite(&cnt, 1, 1, f);
    }
  }
}



static void writeRGBChannels(FILE *f, UCHAR **Image, int XSize, int YSize)
{
  UCHAR data = 0;
  int i;
  long int line;
  for (line = 0; line < YSize; line++) 
    for (i=0;i<3;i++) {
      writeChannelLine(f,Image[i],XSize,line);
      fwrite(&data, 1,XSize%2, f);
    }
}



static FILE *writeHeader_(char Name[], int XSize, int YSize, int planeNumber, int bytePerLine, int paletteInfo)
{
  struct PCXHeader Header;
  FILE *f;
  makeHeader(&Header,XSize,YSize,planeNumber,bytePerLine,paletteInfo);
  #ifdef __SUN__ 
    makeSunHeader (&Header); 
  #endif
  if(!(Name&&Name[0] && (f = fopen(Name, "wb")))) return NULL;
  fwrite(&Header, sizeof(struct PCXHeader), 1, f);
  return f;
}


static int writePaletteAndClose(FILE *f)
{
  int j;
  UCHAR    Palette[768];
  UCHAR    data = 0x0c;    
  fwrite(&data, 1, 1, f); 
  for(j = 0; j < 256; j++) memset(&(Palette[j*3]),(UCHAR) j,3);
  fwrite(Palette, sizeof(Palette), 1, f);    
  return fclose(f);
}


int WritePCX(unsigned char *Image, int XSize, int YSize, char Name[])
{
  long int  line;
  FILE      *f = writeHeader_(Name,XSize,YSize,1,XSize,2);

 if (!f) return -1;
  for (line = 0; line < YSize; line++) writeChannelLine(f,Image,XSize,line);
  return writePaletteAndClose (f);
}



int ReadTrueColorPCX(char* Name, int *XSize, int *YSize, unsigned char** RImage, unsigned char** GImage, unsigned char** BImage)
{
  long int            i = 0, j,k,l;
  long                PackedImageSize;
  unsigned char*      PackedImage;
  unsigned char*      PackedBytes;
  int                 PackCount;
  int        length;
  int       size;
  unsigned char*    pPcxImage;
  unsigned char*    pPcxPtr;
  struct PCXHeader Header;
  FILE* f = fopen(Name, "rb");

  *XSize = 0;
  *YSize = 0;

  if (!f) { printf("File not found\n");  return -2; }
  fseek(f, 0, SEEK_SET);
  fread(&Header, sizeof(struct PCXHeader), 1, f);

#ifdef __SUN__
  makeSunHeader (&Header);
#endif

  if (Header.PlanesNumber!=3 || Header.BitPerPixel!=8 || Header.ZsoftSign!=10 || Header.Version!=5 || Header.PaletteInfo!=1) {
    fclose(f); return -2;
  }
  *XSize = Header.X2 - Header.X1 + 1;
  *YSize = Header.Y2 - Header.Y1 + 1;
  size = *XSize**YSize;
  length = align_to_word(*XSize);
  fseek(f, 0, SEEK_END);
  fseek(f, sizeof(struct PCXHeader), SEEK_SET);
  PackedImageSize = ftell(f)-sizeof(struct PCXHeader);
  if(!(   (PackedBytes = PackedImage = (unsigned char*)malloc(PackedImageSize + 100)))
       && (pPcxPtr = pPcxImage   = (unsigned char*)malloc(size*3))        ) {
    fclose(f);
    if(PackedImage) free(PackedImage);
    if(pPcxImage)   free(pPcxImage);
    return -1;
  }
  fread(PackedImage, PackedImageSize, 1, f);
  fclose(f); 
  while (i < *YSize * length * 3) {
    if (*PackedBytes > (unsigned char)0xC0) {
      PackCount = *(PackedBytes) ^ (unsigned char)0xC0;
      PackedBytes++;
      memset (pPcxPtr, *PackedBytes, PackCount);
      PackedBytes++;
      i += PackCount;
      pPcxPtr += PackCount;
    }
    else {
      *pPcxPtr++ = *PackedBytes++;
      i++;
    }
  }
  free(PackedImage);
  if (!(   (*RImage = (unsigned char*)malloc(size))
        && (*GImage = (unsigned char*)malloc(size))
        && (*BImage = (unsigned char*)malloc(size)))) {
    if(pPcxImage) free(pPcxImage);
    if(*RImage)   free(*RImage);
    if(*GImage)   free(*GImage);
    if(*BImage)   free(*BImage);
    *RImage = *GImage = *BImage=NULL;
    return -1;
  }
  for (i=k=0; i<*YSize; i++) 
    for (l=i*length*3,j=0; j<*XSize; j++,k++,l++) {
      *RImage[k] = pPcxImage [l         ];
      *GImage[k] = pPcxImage [l+length  ];
      *BImage[k] = pPcxImage [l+2*length];
    }
  free (pPcxImage);
  return 0;
}


int WriteTrueColorPCX(char* Name, int XSize, int YSize, unsigned char* RImage, unsigned char* GImage, unsigned char* BImage)
{
  UCHAR *image[3] = {RImage,GImage,BImage};
  FILE  *f        = writeHeader_(Name,XSize,YSize,3,align_to_word(XSize),1);
  if (!f) return EOF;
  writeRGBChannels(f,image,XSize,YSize);
  return fclose(f);
}

А вот какая ошибка:
Код

Compiling...
pcx_io.cpp
c:\program files\microsoft visual studio\myprojects\pcx\pcx_io.cpp(318) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.

pcx_io.obj - 1 error(s), 0 warning(s)




Это сообщение отредактировал(а) MAKCim - 5.1.2008, 21:07
PM   Вверх
bsa
Дата 5.1.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Отключи в настройках проекта precompiled headers (где именно находится лучше поискать в справке)
PM   Вверх
JackYF
Дата 5.1.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(M-Xander @  5.1.2008,  20:02 Найти цитируемый пост)
Используемая версия Студии 6.0.
На более новых версиях всё отлично компилится и работает.

студия эта наверняка хочет
Цитата

#include "stdafx.h"

первой строчкой.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
M-Xander
Дата 5.1.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.1.2008

Репутация: нет
Всего: нет



Спасибо!!!
PM   Вверх
JackYF
Дата 5.1.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



M-Xander, укажи, какой способ тебе помог, после чего пометь тему решённой.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
M-Xander
Дата 6.1.2008, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.1.2008

Репутация: нет
Всего: нет



2 JackYF: помогло добавление stdafx.h
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.