AlwaysBeginner

AlwaysBeginner

AlwaysBeginnerAlwaysBeginner· 3년

질문[C#/WPF] RGBa 배열을 BitmapSource 혹은 BitmapImage로 변환하는 방법을 알고싶습니다...

이미 RGBa값이 들어가있는 RGBBuffer[1920 * 1440] 으로 BitmapSource 혹은 Bitmap 이미지를 얻고자 합니다. 현재  BitmapSource thermalBitmapSource = BitmapSource.Create(1920, 1440, 96, 96, PixelFormats.Bgra32, null, RGBBuffer, 1920/ PixelFormats.Bgra32.BitsPerPixel); 을 하였으나 System.ArgumentException: '값이 예상 범위를 벗어났습니다' 라는 에러가  나오고 있습니다.    위 문에 어떤 점이 잘못된 것인지 혹은 위 방법 말고 다른 방법이 있는지 조언을 구하고 싶습니다..
1.5K
1
1
0
윈비
윈비·2022-05-08
// Define parameters used to create the BitmapSource. PixelFormat pf = PixelFormats.Bgr32; int width = 200; int height = 200; int rawStride = (width * pf.BitsPerPixel + 7) / 8; byte[] rawImage ...
AlwaysBeginnerAlwaysBeginner· 3년

질문[MFC] CFileFind 를 이용하여 여러 DAT 파일을 읽어오고 Byte로 저장하는 코드 입니다...

void CMultiDATToByteDlg::LoadDATFile() { CFileFind fileFinder; BOOL bFind = fileFinder.FindFile(m_strRelayFilePath + "\\ToIDS" + "\\*.dat*"); int nFileCount = 0; while (bFind) { bFind = fileFinder.FindNextFile(); if (fileFinder.IsDots()) continue; nFileCount++; CStdioFile DATFile; CString  DATFile_Name = fileFinder.GetFileTitle(); int  DATFile_Length = fileFinder.GetLength(); byte*  DATFile_Data = (byte*)malloc(sizeof(byte)* DATFile_Length); if (DATFile.Open(fileFinder.GetFilePath(), CFile::modeRead)) { DATFile.Read(DATFile_Data, DATFile_Length); DATFile.Close(); int nListIndex = 0; while (true) { POSITION pos = m_DATFileList.FindIndex(nListIndex); if (m_DATFileList.GetCount() == 0 || pos == NULL) { DATFileObject *pDATFileObject = new DATFileObject; pDATFileObject->m_DATFile_Name = DATFile_Name; pDATFileObject->m_DATFile_Length = DATFile_Length; pDATFileObject->m_DATFile_Data = (byte*)malloc(sizeof(byte)* pDATFileObject->m_DATFile_Length); memcpy(pDATFileObject->m_DATFile_Data, DATFile_Data, pDATFileObject->m_DATFile_Length); m_DATFileList.AddTail(pDATFileObject); DataObject* pDataObject = new DataObject; pDataObject->m_strIP = pDATFileObject->m_DATFile_Name; m_DataObjectList.AddTail(pDataObject); break; } else { DATFileObject* pDATFileObject = (DATFileObject*)m_DATFileList.GetAt(pos); if (DATFile_Name == pDATFileObject->m_DATFile_Name) { pDATFileObject->m_DATFile_Length = DATFile_Length; free(pDATFileObject->m_DATFile_Data); pDATFileObject->m_DATFile_Data = (byte*)malloc(sizeof(byte)* pDATFileObject->m_DATFile_Length); memcpy(pDATFileObject->m_DATFile_Data, DATFile_Data, pDATFileObject->m_DATFile_Length); m_DATFileList.SetAt(pos, pDATFileObject); break; } else nListIndex++; } } } free(DATFile_Data); } fileFinder.Close(); DATFileToData(); } void CMultiDATToByteDlg::DATFileToData() { DATFileObject* pDATFileObject = NULL; DataObject* pDataObject = NULL; POSITION pos = m_DATFileList.GetHeadPosition(); while (pos != NULL) { pDATFileObject = (DATFileObject*)m_DATFileList.GetNext(pos); for (int nIndex = 0; nIndex < m_DataObjectList.GetCount(); nIndex++) { pDataObject = (DataObject*)m_DataObjectList.GetAt(m_DataObjectList.FindIndex(nIndex)); if (pDATFileObject->m_DATFile_Name == pDataObject->m_strIP) break; } pDataObject->m_Data = (byte*)malloc(sizeof(byte)* pDATFileObject->m_DATFile_Length); memcpy(pDataObject->m_Data, pDATFileObject->m_DATFile_Data, pDATFileObject->m_DATFile_Length); m_DataObjectList.SetAt(pos, pDataObject); } }   위와 같이 작성하니 atlsimpstr.h 파일에 CopyUpLargeMov:         bt      __favor, __FAVOR_ENFSTRG        ; check if Enhanced Fast Strings is supported         jnc     CopyUpSSE2Check                 ; if not, check for SSE2 support         rep     movsb         mov     eax,[esp + 0Ch]                 ; return original destination pointer         pop     esi         pop     edi         M_EXIT 액세스 위반 문구가 나옵니다... 혹시 조언 좀 구할 수 있을까요? 
1.1K
1
1
0
윈비
윈비·2022-04-23
코드 상에 삭제된 힙 메모리를 사용하고 있는 부분이 있을 수 있습니다. 디버그 모드로 빌드하여 디버거를 확인하시면 해당 코드를 찾으실 수도 있습니다.