2011-01-05 2 views
2

내 응용 프로그램에 두 개의 (실제로는 많은) PNG (.png) 이미지가 있습니다. 둘 다 투명한 영역을 여기저기서 가지고 있습니다.두 개의 PNG 이미지를 .NET을 사용하여 하나의 이미지로 결합

내 응용 프로그램에서 두 이미지를 가져 와서 결합하고 결과를 그림 상자에 표시하고 싶습니다. 나중에 버튼을 통해 결과를 저장하려고합니다.

지금까지 나는 두 이미지를 찾고 결합했지만 투명성 문제는 해결되지 않습니다. 즉, 한 이미지를 다른 이미지 위에 올려 놓으면 이미지의 배경이 일반 흰색 상자이기 때문에 최상위 이미지 만 결과로 볼 수 있습니다. 어느 쪽이 아닌가.

Dim Result As New Bitmap(96, 128) 
    Dim g As Graphics = Graphics.FromImage(Result) 
    Dim Name As String 
    For Each Name In BasesCheckList.CheckedItems 
     Dim Layer As New Bitmap(resourcesPath & "Bases\" & Name) 
     For x = 0 To Layer.Width - 1 
      For y = 0 To Layer.Height - 1 
       Result.SetPixel(x, y, Layer.GetPixel(x, y)) 
      Next 
     Next 
     Layer = Nothing 
    Next 

resourcesPath 내 자원 폴더의 경로입니다 : 여기

내 코드의 비트가. Bases은 그 안에있는 폴더입니다. 이미지 이름은 Name입니다.

답변

1

나는 당신의 스케일링 문제가 다른 DPI가있는 이미지와 관련이 있다고 생각합니다. 이 경우 DrawImage() 이미지는 그래픽 개체의 DPI와 일치하도록 이미지의 크기를 조정하므로 실제로 필요합니다. 주의 사항 : 에 크기를 입력하지 않은 경우 DrawImage() 어떤 이유인지 DrawImageUnscaled()과 동일한 작업을 수행합니다.

Dim result As New Bitmap(96, 128) 

Dim directoryName As String = String.Format("{0}Bases", resourcesPath) 
Using g As Graphics = Graphics.FromImage(result) 
    For Each imageName As String In BasesCheckList.CheckedItems 
     Dim fileName As String = IO.Path.Combine(directoryName, imageName) 
     Using layer As New Bitmap(fileName) 
      g.DrawImage(layer, 0, 0, 96, 128) 
     End Using 
    Next 
End Using 

더 자세한 토론은 Xtreme VB 토크 포럼을 통해 이루어집니다. 여기서 크로스 게시를 결정했습니다. 전선이 넘어져 모든 사람들이 시간을 낭비 할 확률이 높아 지므로 앞으로는하지 마십시오.

3

문제는이 작업을 수동으로 수행하려는 것입니다. 하지마. 이미지 그리기를위한 많은 라이브러리 루틴이 있으며 투명도를 올바르게 처리하는 방법을 알고 있습니다.

Dim Result As New Bitmap(96, 128) 
Dim g As Graphics = Graphics.FromImage(Result) 
Dim Name As String 
For Each Name In BasesCheckList.CheckedItems 
    Dim Layer As New Bitmap(resourcesPath & "Bases\" & Name) 
    g.DrawImageUnscaled(Layer, 0, 0); 
    Layer = Nothing 
Next 
+0

고맙습니다. 한 가지를 제외하고는 제대로 작동하는 것 같습니다. 결과 이미지를 미리보기 위해 사용하는 그림 상자에 이미지의 "크기가 조정 된, 더 큰"버전이 표시됩니다. 결국 나는 PictureBox.Image = Result를 사용했다. 왜 이미지가 그런 식으로 표시되는지 이해할 수 없다. – Voldemort

+0

@Omega : 이미지는 쓰고있는 비트 맵과 같은 크기인가? –

+0

예, 비트 맵 "결과"는 96x128이고 테스트에 사용하는 두 비트 맵은 96x128입니다. 그러나 그림 상자는 2 또는 뭔가로 결과를 확대하는 것으로 보인다 ... – Voldemort

관련 문제