Пример #1
0
int __stdcall GetPicture(
		LPSTR buf, long len, unsigned int flag, 
		HANDLE *pHBInfo, HANDLE *pHBm,
		SPI_PROGRESS lpPrgressCallback, long lData)
{
	int ret = SPI_OTHER_ERROR;
	char *data;
	char *filename;
	long datasize;
	HANDLE hf;
	DWORD ReadBytes;

	if ((flag & 7) == 0) {
	/* bufはファイル名 */
		hf = CreateFile(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
		if (hf == INVALID_HANDLE_VALUE) return SPI_FILE_READ_ERROR;
		datasize = GetFileSize(hf, NULL) -len;
		if (datasize < HEADBUF_SIZE) {
			CloseHandle(hf);
			return SPI_NOT_SUPPORT;
		}
		if (SetFilePointer(hf, len, NULL, FILE_BEGIN) != (DWORD)len) {
			CloseHandle(hf);
			return SPI_FILE_READ_ERROR;
		}
		data = (char *)LocalAlloc(LMEM_FIXED, datasize);
		if (data == NULL) {
			CloseHandle(hf);
			return SPI_NO_MEMORY;
		}
		if (!ReadFile(hf, data, datasize, &ReadBytes, NULL)) {
			CloseHandle(hf);
			LocalFree(data);
			return SPI_FILE_READ_ERROR;
		}
		CloseHandle(hf);
		if (ReadBytes != (DWORD)datasize) {
			LocalFree(data);
			return SPI_FILE_READ_ERROR;
		}
		filename = buf;
	} else {
	/* bufはファイルイメージへのポインタ */
		data = buf;
		datasize = len;
		filename = NULL;
	}

	/* 一応フォーマット確認 */
	if (!IsSupportedEx(filename, data)) {
		ret = SPI_NOT_SUPPORT;
	} else {
		ret = GetPictureEx(datasize, pHBInfo, pHBm, lpPrgressCallback, lData, data);
	}

	if ((flag & 7) == 0) LocalFree(data);

	return ret;
}
Пример #2
0
// 対応しているかどうか(対応していれば非0を返す)
unsigned int STDCALL IsSupported(const char* pSrc, unsigned int dwSize)
{
	// 識別用に最低限必要なバイト数を返す
	if(pSrc==NULL){
		return HEADER_SIZE;
	}
	// メモリ入力
	else if(dwSize){
		return IsSupportedEx(pSrc, dwSize);
	}
	// ファイル入力
	else{
		smart_array< char > buf;
		if(File2Memory(pSrc, buf, HEADER_SIZE)){
			return IsSupportedEx(buf.GetPtr(), buf.GetSize(), pSrc);
		}
		return 0;
	}
}
Пример #3
0
int __stdcall GetPictureInfo
(LPSTR buf, long len, unsigned int flag, struct PictureInfo *lpInfo)
{
	int ret = SPI_OTHER_ERROR;
	char headbuf[HEADBUF_SIZE];
	char *data;
	char *filename;
	HANDLE hf;
	DWORD ReadBytes;

	if ((flag & 7) == 0) {
	/* bufはファイル名 */
		hf = CreateFile(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
		if (hf == INVALID_HANDLE_VALUE) return SPI_FILE_READ_ERROR;
		if (SetFilePointer(hf, len, NULL, FILE_BEGIN) != (DWORD)len) {
			CloseHandle(hf);
			return SPI_FILE_READ_ERROR;
		}
		if (!ReadFile(hf, headbuf, HEADBUF_SIZE, &ReadBytes, NULL)) {
			CloseHandle(hf);
			return SPI_FILE_READ_ERROR;
		}
		CloseHandle(hf);
		if (ReadBytes != HEADBUF_SIZE) return SPI_NOT_SUPPORT;
		data = headbuf;
		filename = buf;
	} else {
	/* bufはファイルイメージへのポインタ */
		if (len < HEADBUF_SIZE) return SPI_NOT_SUPPORT;
		data = (char *)buf;
		filename = NULL;
	}

	/* 一応フォーマット確認 */
	if (!IsSupportedEx(filename, data)) {
		ret = SPI_NOT_SUPPORT;
	} else {
		ret = GetPictureInfoEx(data, lpInfo);
	}

	return ret;
}
Пример #4
0
/*-------------------------------------------------------------------------*/
int __stdcall IsSupported(LPSTR filename, DWORD dw)
{
  char *data;
  char buff[HEADBUF_SIZE];
  DWORD ReadBytes;

  if ((dw & 0xFFFF0000) == 0) {
  /* dwはファイルハンドル */
    if (!ReadFile((HANDLE)dw, buff, HEADBUF_SIZE, &ReadBytes, NULL)) {
      return 0;
    }
    data = buff;
  } else {
  /* dwはバッファへのポインタ */
    data = (char *)dw;
  }

  /* フォーマット確認 */
  if (IsSupportedEx(filename, data)) return 1;

  return 0;
}