使用pyGame和pyOpenGL,我创建了一个2D表面,我在Photoshop中使用这个815x815 PNG作为纹理:
以下是我如何使用pygame加载图像并将其转换为纹理。
glBlendFunc(GL_SRC_ALPHA, GL_ONE)
glBegin(GL_QUADS)
glVertex2fv((-1,-1))
glTexCoord2f(0,1)
glVertex2fv((-1,1))
glTexCoord2f(1,1)
glVertex2fv((1,1))
glTexCoord2f(1,0)
glVertex2fv((1,-1))
glTexCoord2f(0,0)
glEnd()
以下是我用来绘制正方形和纹理的代码。
Private Sub GetServerInfo_Click()
Dim i As Integer
Dim rowCount As Integer
rowCount = Worksheets("Inventory_Repository").Cells.SpecialCells(xlCellTypeLastCell).Row
For i = 3 To rowCount
Cells(i, 10).Value = sPing(Cells(i, 4).Value)
If InStr(Cells(i, 10), "Unavailable") > 0 Then
Cells(i, 10).Interior.Color = RGB(255, 0, 0)
Else
Cells(i, 10).Interior.Color = RGB(0, 255, 0)
End If
Next i
MsgBox ("IP has been updated")
End Sub
Function sPing(sHost) As String
Dim oPing As Object, oRetStatus As Object
Set oPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select * from Win32_PingStatus where address = '" & sHost & "'")
For Each oRetStatus In oPing
If IsNull(oRetStatus.StatusCode) Or oRetStatus.StatusCode <> 0 Then
sPing = "Unavailable"
Else
sPing = oRetStatus.ProtocolAddress
End If
Next
End Function
以下是运行代码时会发生的情况。 如何正确显示纹理,为什么会这样?
修改
这是某种透明度错误,因为将图像的背景从透明更改为白色可以解决问题,但是,convert_alpha()并没有解决问题。另外,我不知道为什么会被投票,这是一个合理的问题。
答案 0 :(得分:1)
我怀疑罪魁祸首是透明度。根据您创建png的方式,圆圈至少会有一些在某种程度上透明的像素。如果pygame不知道那些透明度值,它将把它渲染为基色,无论像素是否应该可见。当你阅读the documentation时,有关于pygame.image.load的这个模糊:
对于Alpha透明度,与.png图像一样,在加载后使用convert_alpha()方法,以使图像具有每像素透明度。
在评论中,有一个用户创建的函数(匿名,所以......请自担风险)使用此方法:
def load_image(file, colorkey=False):
file = os.path.join('data', file)
try:
image = pygame.image.load(file)
colorkey = image.get_at((0, 0))
if colorkey is True:
image.set_colorkey(colorkey, pygame.RLEACCEL)
except:
print 'Unable to load: ' + file
return image.convert_alpha() #Convert any transparency in the image
你可以尝试使用它,或者我觉得你可以简单地说:
myTex = pygame.image.load('0.png')
myTex = myTex.convert_alpha()