我試圖做一個簡單的圖像查看器。我基本上加載一個圖像到一個表面,然後從它創建一個紋理。SDL2與操縱像素和SDL_UpdateTexture混淆圖像
最後,我按照migration guide的慣例做了通常的SDL_RenderClear()
,SDL_RenderCopy()
和SDL_RenderPresent()
。
這工作得很好,但如果我撥打以上SDL_UpdateTexture()
前3渲染電話,我得到一個混亂的圖像:
我打電話SDL_UpdateTexture()這樣的:
SDL_UpdateTexture(texture, NULL, image->pixels, image->pitch)
其中image
是我爲圖像加載的表面,texture
是我從中創建的紋理。嘗試改變音調的結果會導致不同的混亂圖像。我也嘗試使用rect作爲第二個參數,但如果rect與圖像的尺寸相同,則結果相同。如果尺寸較大(例如與窗口相同),則更新不會發生,但沒有錯誤。
該full code可用。
我想通過image->pixels
直接操作表面的像素,然後撥打SDL_UpdateTexture()
,但只是調用SDL_UpdateTexture()
而沒有任何篡改就足以搞砸了。
謝謝您的回答。這是memcpy上的焦點,但運行時,如果你替換image-> pitch只是音調。由於formattedSurf沒有在任何地方定義,我從colorKey行註釋到for循環結束。我似乎無法使用像素沒有崩潰的程序。 – Gigi
@Gigi對不起,我犯了一些錯誤,因爲我正在調整我的代碼以適應你的錯誤,所以錯過了一些變量名。你能否再次嘗試完整的代碼(包括memcopy),我認爲這可能是由於在創建紋理之前不轉換表面格式,所以我添加了這個。 – Zammalad
您錯過了紋理的聲明,並且在imageFormatted中有一個拼寫錯誤(缺少'r') - 所以SDL_FreeSurface(imageFormatted)不一致。修復這些後,我仍然在memcpy上崩潰。你可以嘗試在發佈之前測試代碼嗎? – Gigi