最近在研究怎么從SWF檔案內直接提取出PNG圖片。
SWF記憶體儲PNG圖片如果保存的時候選擇有損壓縮模式保存。
那么SWF檔案內的PNG圖片會被分割成2部分保存下載,再SWF調取這張PNG圖片的時候再將圖片進行還原。
SWF保存PNG的兩部分資料分別為
第一部分:為一張JPG圖片。不帶透明通道,直接提取出來,就是一張黑色底圖的JPG圖片。(因為搞不懂JPG圖片的結構,所以無法提取出像素資訊。上網查了查,這個是有損,還原RGB好像非常麻煩。所以暫時放棄直接提取圖片像素)
第二部分:為一個壓縮過的透明通道資料。PNG圖片記錄像素是RGBA,RGBA,RGBA.......,這種模式。這二部分,就只記錄A,A,A,A,A,A......這種記錄模式。
也就是比如一張圖片寬50,長50,那么第二部分的資料解壓后長度為50*50。也就類似于一張蒙版黑白圖片資料。但實際不是圖片。
現在我的合并模式是,把JPG直接轉為PNG。然后把對應的每個像素的RGBA中的A資料補進像素內。不過這個方法非常耗時間。
如果用GDI把第二部分資料合并到第一部分。具體是什么思路。對GDI不是很了解,希望大神指點。
第一部分的JPG圖片轉換為PNG圖片后,是一張無透明通道的PNG圖片,像素排列為RGB,RGB,RGB.......這種排列。而且我用反編譯軟體匯出后查看,發現轉換過的圖片跟反編譯匯出的圖片的RGB是有偏差的,就是說這樣轉換一次對圖片是有影響的。
SWF檔案在呼叫的時候都是瞬間就相應了,那個是什么技術,能讓著2部分這么迅速的合并成PNG圖片。
希望大神能幫忙解答一下,不勝感激(大神說說思路就行了,鄙人看不懂原始碼,不會C語言。。。。謝。。。)。
uj5u.com熱心網友回復:
GDI+Bitmap::FromStream
Bitmap::GetPixel
Bitmap::SetPixel
uj5u.com熱心網友回復:
Bitmap MyBitMap;MyBitMap.FromFile(szFilePath);
uj5u.com熱心網友回復:
你是 要 打開.swf (ShockWaveFlash)檔案, 讀取 內容 ,最后 創建一個 png 檔案 ?是 使用 com 組件 嗎 ?
class CShockwaveFlash : public CWnd
{
protected:
DECLARE_DYNCREATE(CShockwaveFlash)
public:
CLSID const& GetClsid()
{
static CLSID const clsid
= { 0xd27cdb6e, 0xae6d, 0x11cf, { 0x96, 0xb8, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0 } };
return clsid;
}
能看看你的代碼 嗎?
uj5u.com熱心網友回復:
使用GDI+轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/65502.html
標籤:基礎類
上一篇:好久沒來這了,說說感慨
