, 새의 WinForm 응용 프로그램에서빠른 방법 비트 맵 배열에서 큰 비트 맵을 만들 수 있습니까? 이 코드를
복사/붙여 넣기 당신이 그것을 실행하는 경우이 바탕 화면에 파일을 작성합니다 : 시간의 test123abcd.png
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim SquareSize = 5
Dim GridX = 2500
Dim GridY = 2500
Dim SquareCount = GridX * GridY - 1
Dim sw As New Stopwatch
Dim Rect(4) As Rectangle
Rect(0) = New Rectangle(0, 3, 3, 1)
Rect(1) = New Rectangle(3, 0, 1, 3)
Rect(2) = New Rectangle(3, 3, 3, 1)
Rect(3) = New Rectangle(0, 0, 1, 3)
Dim fullsw = Stopwatch.StartNew
Using board = New Bitmap(SquareSize * (GridX + 1), SquareSize * (GridY + 1), Imaging.PixelFormat.Format32bppPArgb)
Using graph = Graphics.FromImage(board)
Using _board = New Bitmap(SquareSize, SquareSize, Imaging.PixelFormat.Format32bppPArgb)
Using g As Graphics = Graphics.FromImage(_board)
For i = 0 To SquareCount
g.Clear(If((i And 1) = 1, Color.Red, Color.Blue))
g.FillRectangles(Brushes.White, Rect)
sw.Start()
graph.DrawImageUnscaled(_board, ((i Mod GridX) * SquareSize), ((i \ GridY) * SquareSize))
sw.Stop()
Next
End Using
End Using
End Using
fullsw.Stop()
board.Save(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) & "\test123abcd.png", Imaging.ImageFormat.Png)
End Using
MessageBox.Show("Full SW: " & fullsw.ElapsedMilliseconds & Environment.NewLine &
"DrawImageUnscaled SW: " & sw.ElapsedMilliseconds)
End Sub
약 40 % ~ 45 %를 지출 내역은 DrawImageUnscaled
입니다. 현재 컴퓨터에서 약 23 초가 걸리는데 약 50 초가 걸립니다.
은 속도를 올리는 방법이 DrawImageUnscaled
일까요? (그리고 아마도 모든 일?)
편집 - 생성 부분 (g.FillRectangles(Brushes.White, Rect)
은 꽤 많은 시간이 소요도)이 피할 수없는 가정으로 C#을
당신이 정확히 달성하기를 원합니까? (입력/출력) – varocarbas
@varocarbas, 조각으로 나뉘어져있는 전체 비트 맵을 저장하려고합니다. – Fredou
예, 입력 이미지 또는 색상 배열이 표시되지 않습니다. 기본적으로 빈 비트 맵에서 픽셀의 위치/크기에 영향을줍니다. 그것이 입/출력에 대한 나의 질문입니다. 예를 들어 image1.png와 image2.png를 입력으로 가져 와서 imageEnd.png에 병합하고자하는 경우 모든 작업을 수행 할 필요가 없습니다. 이미지의 크기를 다시 줄이려면이 중 하나를 수행 할 필요가 없습니다.이 루프를 가속시키는 가장 좋은 방법은 정확한 조건에 따라 가능한 다른 접근 방식을 사용하는 것입니다. – varocarbas