Microsoft MVP성태의 닷넷 이야기
C# SharpDX 화면 캡쳐 관련해서 질문 드립니다. [링크 복사], [링크+제목 복사],
조회: 16338
글쓴 사람
이완호 (dldhksgh90 at naver.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

                        _device.ImmediateContext.CopyResource(textureResource, d3d11Texture2D);
                        DataBox mapSource = _device.ImmediateContext.MapSubresource(d3d11Texture2D, 0, MapMode.Read, SharpDX.Direct3D11.MapFlags.None);
                        Bitmap bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);

                        Rectangle bounds = new Rectangle(0,0, desktopBounds.Width, desktopBounds.Height);
                        BitmapData mapDest = bitmap.LockBits(bounds, System.Drawing.Imaging.ImageLockMode.WriteOnly, bitmap.PixelFormat);
                        var sourcePtr = mapSource.DataPointer;
                        var destPtr = mapDest.Scan0;

                        for (int y = 0; y < height; y++)
                        {

                            Utilities.CopyMemory(destPtr, sourcePtr, width * 4);
                            sourcePtr = IntPtr.Add(sourcePtr, mapSource.RowPitch);
                            destPtr = IntPtr.Add(destPtr, mapDest.Stride);
                        }
                        

                        createBitmap(bitmap);
                        bitmap.UnlockBits(mapDest);

해당 코드를 통해 Bitmap 을 생성하고


                    EncoderParameters myEncoderParameters = new EncoderParameters(1);
                    myEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 80L);
                    sendImage.Save(memory, GetEncoder(ImageFormat.Jpeg), myEncoderParameters);

생성된 비트맵을 버퍼로 뽑아내어 소켓을 통해 송수신 받습니다.
여기서 System.Drawing.Bitmap에서 MemoryStream으로 변환하는 과정의 소요시간을 줄이고 싶습니다.

그렇기에 SharpDX.Direct2D1.Bitmap 으로 만들었을 경우 네트워크 송수신을 위해 메모리스트림을 통해 더욱 적은 용량의 버퍼로 변환하는 방법이 있을까요 ?





[연관 글]






[최초 등록일: ]
[최종 수정일: 12/17/2021]


비밀번호

댓글 작성자
 



2021-12-18 12시44분
그러면, 애당초 Utilities.CopyMemory의 루프에서 JPG 데이터를 구성하는 것이 더 좋지 않을까요? 물론, 그것을 위해서는 적절한 JPEG 라이브러리를 쓰시는 것이 좋을 듯합니다.

사실, 화면 캡쳐를 연속으로 뜰 것이라면 일종의 동영상이라고 봐야 합니다. 그렇다면 동영상 코덱을 적용해 보는 것도 나쁘진 않을 것입니다. 가령, 아래의 프로젝트가 그런 식으로 작성된 것입니다.

akon47/ScreenRecorder
; https://github.com/akon47/ScreenRecorder

(업데이트: 2021-12-22)

아래의 글을 참고하세요.

C# - (SharpDX + DXGI) 화면 캡처한 이미지를 빠르게 JPG로 변환하는 방법
; https://www.sysnet.pe.kr/2/0/12889
정성태

... 31  32  33  34  35  36  37  38  39  40  41  [42]  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
4839오세운6/2/201720117로그인폼 만들기 [1]
4838후배5/29/201720727PDF Reader 라이브러리.. [3]
4837KDP5/29/201720619c++ to C# 컨버팅 문의 [2]
4836popo5/26/201722924리플렉션 성능 관련 질문 드립니다. [2]
4835guest5/25/201719020wpf Canvas 질문드립니다. [1]
4834부탁드립...5/19/201720206익스체인지 서버 구동중 인증서를 받는 과정에서오류가 납니다 [1]
4833안종윤5/18/201720269winform을 Web Browser에 붙일 수 있는지요? [1]
4832guest5/17/201719136c# UDP socket예제 실행방법 [3]
4831guest5/15/201723504WPF .net 3.5에서 TextBox 한글 문제 [3]
4830초보자5/7/201726733프로그램 비정상 종료 메시지 창 없애는 방법 [4]
4829윤현수4/26/201726445System.Text.Encoding 질문 [1]
4828jaem...4/20/201720252시스템 종료시 block 함수 xp 지원가능한 방법 질문 [2]
4827ds4/13/201722104매서드 정의로 이동시 [메타데이터에서]에서 라고 나오는 것은 뭔가요? [1]
4826김솔지4/11/201719065CxImage 문자 출력 [1]
4825플메4/10/201718076덱스트 업로드 하는데 구성요소 서비스에 엑셀이 안뜨네요..ㅜㅜ [1]파일 다운로드1
4824김상경4/9/201718470win7에서 vb6.0을 이용해서 프로그램을 만들었습니다.(제가 만든건 아니고 옆 동료가 만들었습니다.) [1]파일 다운로드1
4823조상현3/28/201719088windows event log 에 대한 정보는 어디서 얻을 수 있을까요? [1]
4822부우3/24/201721814글수정이 안되어 다시올려드립니다ㅠ [12]파일 다운로드2
4821부우3/22/201737163파일이나 어셈블리 중 하나를 로드에러 좀 봐주세요 [9]파일 다운로드1
4820듀이3/20/201720567오차 없이 동시에 명령을 보내게 가능한가요? [2]파일 다운로드1
4819popo3/20/201721032C# sslstream 사용시 Cipher List 설정 [3]
4818부우3/16/201732689DllImport 사용시 진입점을 찾을수 없습니다 [2]
4817yun3/15/201721247서피스프로4의 HYPER-V로 윈도우7을 깔았는데... [1]
4816부우3/15/201722534C++ DLL함수 사용 질문드립니다 [10]
4815김지용3/14/201718513.net core linux 오류 [2]
4814김솔지3/13/201719437인쇄 시 , 출력화면을 이미지 파일로 저장하고 싶습니다. [1]파일 다운로드1
... 31  32  33  34  35  36  37  38  39  40  41  [42]  43  44  45  ...