如題 delphi7 用pngimage 這個單元加載png 圖片的時候 ,會出現 錯誤,
出問題的時候,代碼直接跳到
TPngObject.DrawPartialTrans
中的
case Header.BitmapInfo.bmiHeader.biBitCount of
{R, G, B images}
24:
FOR j := 1 TO H DO
begin
{Process all the pixels in this line}
FOR i := 0 TO W - 1 DO
begin
if Stretch then i2 := trunc(i / FactorX) else i2 := i;
{Optmize when we don磘 have transparency}
if (AlphaSource[i2] <> 0) then
if (AlphaSource[i2] = 255) then
ImageData[i] := pRGBQuad(@ImageSource[i2 * 3])^ ----》 直接跳到這里,
else
with ImageData[i] do
begin
rgbRed := (255+ImageSource[2+i2*3] * AlphaSource[i2] + rgbRed *
(not AlphaSource[i2])) shr 8;
rgbGreen := (255+ImageSource[1+i2*3] * AlphaSource[i2] +
rgbGreen * (not AlphaSource[i2])) shr 8;
rgbBlue := (255+ImageSource[i2*3] * AlphaSource[i2] + rgbBlue *
(not AlphaSource[i2])) shr 8;
end;
end;
然后 往下走之后 ,圖片就不能加載,
求解
uj5u.com熱心網友回復:
加載的不是png的圖吧?D7 升級到 2010 就自帶了.
uj5u.com熱心網友回復:
有pngimage這個東西么。。uj5u.com熱心網友回復:
加載的全部是 png 的圖片 ,我想請問 這段代碼 具體的作用是干啥的,
uj5u.com熱心網友回復:
使用的是gdiplus嗎?uj5u.com熱心網友回復:
不需要用pngimage ,教你一個簡單的方法實作delphi 7加載 png 透明圖片,需要用到微軟的Visio軟體。第一步,建一個visio空檔案,將想要的png圖片插入Visio中,然后再檔案中的另存為,保存為windows圖元檔案,wmf 格式型別,或者增強型圖元檔案 emf格式。
第二部,直接將wmf 或emf 格式圖片加載到image,delphi 7 中的image是支持wmf與emf格式的檔案,并且能夠實作透明顯示。
uj5u.com熱心網友回復:
5樓的辦法確實可行,很好用uj5u.com熱心網友回復:
一直用png ,未發現問題,可以用ps重新轉下,重新生成png
5樓的方法我試了下,可以用,但又兩個缺點:
1 。轉成emf,檔案大了好多
2. 產生鋸齒。沒有了alpha
uj5u.com熱心網友回復:
5樓的方法果然強悍,謝謝uj5u.com熱心網友回復:
可以用白色背景的bmp圖,把form.transparentColor 設為True , transparentColorvalue 設為ClWihite 可以達到相同的效果。uj5u.com熱心網友回復:
delphi 2007 就自帶了

uj5u.com熱心網友回復:
PNG有很多種格式,TPNGIMAGE會根據色彩深度、透不透明、有沒有Alpha通道決定用哪個函式來繪制。你說的這個函式是用繪制帶Alpha通道的,實際應用上沒遇到過你說的問題,你檢查一下是否用的最新版本。
uj5u.com熱心網友回復:
我們用PNG一般來做水印,有時候也出錯轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/120017.html
