Microsoft MVP성태의 닷넷 이야기
C# SharpDX 화면 캡쳐 관련해서 질문 드립니다. [링크 복사], [링크+제목 복사],
조회: 14219
글쓴 사람
이완호 (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
정성태

... 61  62  63  64  65  66  67  68  [69]  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
854임동찬1/12/201019555이벤트 핸들러와 쓰레드의 관계 [1]
853장근배1/12/201018870압축 프로그램,, [1]
852임동찬1/6/201016258base.OnStart(agrs) [1]
851한귀순1/6/201021733oracle & transaction 질문 [5]
850박한주12/31/200918856COM과 C#간 권한 문제에 관해 여쭤봅니다. [5]
848날쌘돌이12/22/200919847C#으로 개발하는 ActiveX 디버깅 문제 [5]
847최승문12/16/200918616winform에서 웹서비스를 이용할때, 객체가 전송안되는 문제... [2]
846이강구12/14/200917592ATL COM 제작 문의 [3]
845김재영12/9/200920399ClickOnce에서 WinForm을 배포시 변동되는 Args값을 넘길 수 있나요? [3]파일 다운로드1
843김재영12/2/200918013Hyper-V 사용에 대해여 질문이 있습니다. [2]
842한귀순12/1/200920783Attempted to read or write protected memory [2]
841장근배11/30/200922438첨부 파일 Download시 한글 Name [2]
844장근배12/3/200917008    답변글 [답변]: 첨부 파일 Download시 한글 Name파일 다운로드1
840박영민11/20/200916835웹 애플리케이션 질문입니다. [1]
837left...10/21/200917611아래 게시글 관련하여 추가 질문 [3]
836left...10/19/200918599ActiveX 상에서 암시적 dll 로드 [1]
832김우진10/15/200915205C# 에서 swa + security 구현 방법이 없을까요?
833정성태10/15/200919392    답변글 [답변]: C#에서 swa + security 구현 방법이 없을까요? [1]
834김우진10/15/200915438        답변글 예제 메시지 올려드릴께요. [2]파일 다운로드1
838이영우10/30/200915359            답변글 국세청 전자세금계선서에 관하여 문의드립니다.
831채승수10/13/200917464스마트 클라이언트 GAC 등록 문제 여쭤봅니다... [2]
829박찬용10/9/200930024WebBrowser 컨트롤 사용시 새창을 띄울시 세션/쿠키 공유가 왜 안될까요?? [1]파일 다운로드1
827송창훈9/24/200915028[질문]CAS 설정
828정성태9/28/200918208    답변글 [답변]: [질문]CAS 설정 [1]
825김재영9/18/200916027프레임워크별 비트 지원에 대해서 문의를 드립니다. [2]
821채승수8/27/200915459클릭원스를 비스타에서 실행시 [1]
... 61  62  63  64  65  66  67  68  [69]  70  71  72  73  74  75  ...