none
[vb6]RGB 的轉換 RRS feed

  • 問題

  • 我從網路上抓了一張圖,(http://ag.big1688.net/console/DrawRandString.aspx)

    可是每次抓的位元數都不太一樣,(將物件copy 到剪貼簿,再用IPictureDisp 去抓)

    根據http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3726900&SiteID=14

    的轉換法去算圖素

    Dim iBytesPixel As Integer: iBytesPixel = pBMPInfo.bmBitsPixel / 8

    BytesPixel 會等於2,3或4,每一次都不太一樣,我也不曉得為什麼

    2(16 bit)根據http://www.blueshop.com.tw/board/show.asp?subcde=BRD20080812054752T7U&fumcde=FUM200501271723350KG

    的算法,我怎麼轉好像跟原來的都不一樣(16bit>24Bit)

    3(24bit)跟4(32bit,不太清楚結構,4byte我只抓第1,2,3個byte去轉,0跳過)都可以轉

    所以想用"TranslateColors to "去轉,可是搜了一下實在沒東西

    又找到"TranslateBitmapBits"http://msdn.microsoft.com/en-us/library/ms536528(VS.85).aspx

    Windows Color System
    TranslateBitmapBits

    The TranslateBitmapBits function translates the colors of a bitmap having a defined format so as to produce another bitmap in a requested format.

    BOOL WINAPI TranslateBitmapBits(
      HTRANSFORM hColorTransform,
      PVOID pSrcBits,
      BMFORMAT bmInput,
      DWORD dwWidth,
      DWORD dwHeight,
      DWORD dwInputStride,
      PVOID pDestBits,
      BMFORMAT bmOutput,
      DWORD dwOutputStride,
      PBMCALLBACKFN pfnCallback,
      LPARAM ulCallbackData
    );

    其中的

    HTRANSFORM hColorTransform

    好像來自於http://msdn.microsoft.com/en-us/library/ms536535.aspx

    CreateColorTransform

    The CreateColorTransform function creates a color transform that applications can use to perform color management.

    HTRANSFORM WINAPI CreateColorTransform(
      LPLOGCOLORSPACE pLogColorSpace,
      HPROFILE hDestProfile,
      HPROFILE hTargetProfile,
      DWORD dwFlags
    );
    其中的
    LPLOGCOLORSPACE pLogColorSpace,
    來自於http://msdn.microsoft.com/en-us/library/ms536841(VS.85).aspx
    typedef struct tagLOGCOLORSPACE {
      DWORD         lcsSignature;
      DWORD         lcsVersion;
      DWORD         lcsSize;
      LCSCSTYPE     lcsCSType;
      LCSGAMUTMATCH lcsIntent;
      CIEXYZTRIPLE  lcsEndpoints;
      DWORD         lcsGammaRed;
      DWORD         lcsGammaGreen;
      DWORD         lcsGammaBlue;
      TCHAR         lcsFilename[MAX_PATH];
    } LOGCOLORSPACE, *LPLOGCOLORSPACE; 
    這個該如何用vb6定義
     
    2008年8月22日 下午 09:37

解答

  • 最好把你的重點用顏色標記,其他實在看不懂你重點要問啥,最後一段:

    用 VB6 附的工具(在開始工具列裡) API 檢視員 載入 Win32API.txt ,選擇類型 貼上 LOGCOLORSPACE ,就會得到 VB6 的定義宣告。

    2008年8月23日 上午 05:47