示例#1
0
bool FPngImageWrapper::LoadPNGHeader()
{
	check(CompressedData.Num());

	// Test whether the data this PNGLoader is pointing at is a PNG or not.
	if (IsPNG())
	{
		// thread safety
		FScopeLock PNGLock(&GPNGSection);

		png_structp png_ptr = png_create_read_struct_2( PNG_LIBPNG_VER_STRING, this, FPngImageWrapper::user_error_fn, FPngImageWrapper::user_warning_fn, NULL, FPngImageWrapper::user_malloc, FPngImageWrapper::user_free );
		check(png_ptr);

		png_infop info_ptr = png_create_info_struct( png_ptr );
		check(info_ptr);

		PNGReadGuard PNGGuard(&png_ptr, &info_ptr);
		{
			png_set_read_fn(png_ptr, this, FPngImageWrapper::user_read_compressed);

			png_read_info(png_ptr, info_ptr);

			Width = info_ptr->width;
			Height = info_ptr->height;
			ColorType = info_ptr->color_type;
			BitDepth = info_ptr->bit_depth;
			Channels = info_ptr->channels;
			Format = (ColorType & PNG_COLOR_MASK_COLOR) ? ERGBFormat::RGBA : ERGBFormat::Gray;
		}

		return true;
	}

	return false;
}
示例#2
0
IM_TYPE CFormatDetector::ImageFormat(UIC::BaseStreamInput& in)
{
  IM_TYPE             fmt;
  BaseStream::TStatus status;

  fmt = IT_UNKNOWN;

  if(IsBMP(in))
    fmt = IT_BMP;
  else if(IsPNG(in))
    fmt = IT_PNG;
  else if(IsJPEG(in))
    fmt = IT_JPEG;
  else if(IsJPEG2000(in))
    fmt = IT_JPEG2000;
  else if(IsDICOM(in))
    fmt = IT_DICOM;
  else if(IsJPEGXR(in))
    fmt = IT_JPEGXR;

  status = in.Seek(0,UIC::BaseStreamInput::Beginning);
  if(UIC::BaseStreamInput::StatusOk != status)
    return IT_UNKNOWN;

  return fmt;
} // CFormatDetector::ImageFormat()
示例#3
0
BOOL CImage::Load(CString sFileName)
{
    Destroy();

    FILE* f = NULL;
    _TFOPEN_S(f, sFileName.GetBuffer(0), _T("rb"));
    if(f==NULL)
        return FALSE;
    if(IsBitmap(f))
    {
        fclose(f);
        return LoadBitmapFromBMPFile(sFileName.GetBuffer(0));
    }
    else if(IsPNG(f))
    {
        fclose(f);
        return LoadBitmapFromPNGFile(sFileName.GetBuffer(0));
    }
    else if(IsJPEG(f))
    {
        fclose(f);
        return LoadBitmapFromJPEGFile(sFileName.GetBuffer(0));
    }

    fclose(f);
    return FALSE;
}
示例#4
0
//エントリーポイント
int __stdcall wWinMain(HINSTANCE Instance,HINSTANCE,LPWSTR,int)
{
	MSG Msg;

	std::vector<wchar_t> Buffer(MAX_PATH,0);
	DWORD Length;

	//自身のディレクトリを取得する
	Length=GetModuleFileName(nullptr,Buffer.data(),MAX_PATH);
	std::wstring ThisPath(Buffer.data());
	ThisPath[ThisPath.find_last_of(L'\\')]=L'\0';

	//カレントディレクトリをexeと同じ場所に設定
	SetCurrentDirectory(ThisPath.c_str());

	//Shiftキーが押されていたらアップロードした画像を開かない
	ShowBrowser=!(GetKeyState(VK_SHIFT)&0x8000);

	if(Gdiplus::GdiplusStartup(&Token,&StartupInput,nullptr)!=Gdiplus::Status::Ok) return 1;

	Brush.reset(CreateSolidBrush(RGB(100,100,100)),[](void* Obj){if(Obj) DeleteObject(Obj);});

	std::atexit(ShutdownGdiplus);
	//引数にファイルが指定されていたら
	if(__argc==2){
		//ファイルをアップロードして終了
		if(IsPNG(__wargv[1])){
			//PNG はそのままアップロード
			UploadFile(__wargv[1],ShowBrowser);
		}else{
			//PNG 形式に変換
			std::vector<wchar_t> TempDirectory(MAX_PATH,0),TempFile(MAX_PATH,0);
			GetTempPath(MAX_PATH,TempDirectory.data());
			GetTempFileName(TempDirectory.data(),TempPrefix,0,TempFile.data());
			if(ConvertPNG(TempFile.data(),__wargv[1])){
				//アップロード
				UploadFile(TempFile.data(),ShowBrowser);
			}else{
				//PNGに変換できなかった...
				MessageBox(nullptr,L"画像をPNG形式に変換する事が出来ません。",Title,MB_OK|MB_ICONERROR);
			}
			DeleteFile(TempFile.data());
		}
		return true;
	}

	//ウィンドウクラスを登録
	RegisterWindowClass(Instance);

	//アプリケーションの初期化
	if(!InitInstance(Instance)) return 1;
	
	//メインメッセージループ
	while(GetMessage(&Msg,nullptr,0,0)){
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);
	}
	return (int)Msg.wParam;
}
示例#5
0
BOOL CImage::IsImageFile(CString sFileName)
{
    FILE* f = NULL;
    _TFOPEN_S(f, sFileName.GetBuffer(0), _T("rb"));
    if(f==NULL)
        return FALSE;

    if(IsBitmap(f) || IsPNG(f) || IsJPEG(f))
    {
        fclose(f);
        return TRUE;
    }

    fclose(f);
    return FALSE;
}
示例#6
0
static bool IsImage(const char* filename)
{
  return IsJPEG(filename) || IsPNG(filename) || IsPCX(filename) || IsBMP(filename) || IsGIF(filename);
}