- UID
- 3684
- 积分
- 844
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-4-8
- 最后登录
- 1970-1-1
|
发表于 2003-5-26 09:21:06
|
显示全部楼层
如果只是得到Cbitmap可能会简单,可用SetBitmapBits函数
如果存成bmp文件请看:
The bitmap file format is shown in the following illustration.
Structure Corresponding bytes
BITMAPFILEHEADER 0x00 – 0x0D
BITMAPINFOHEADER 0x0E – 0x31
RGBQUAD array 0x32 – 0x75
Color-index array 0x76 – 0x275
其中BITMAPFILEHEADER 是要根据底下几个结构数据自己构造出来的,这就难了,(你也可以写死)CAD的getPreviewIcon函数返回的是不包括BITMAPFILEHEADER 的数据
看看微软怎写的
- [FONT=courier new]
- void CreateBMPFile(HWND hwnd, LPTSTR pszFile, PBITMAPINFO pbi,
- HBITMAP hBMP, HDC hDC)
- {
- HANDLE hf; // file handle
- BITMAPFILEHEADER hdr; // bitmap file-header
- PBITMAPINFOHEADER pbih; // bitmap info-header
- LPBYTE lpBits; // memory pointer
- DWORD dwTotal; // total count of bytes
- DWORD cb; // incremental count of bytes
- BYTE *hp; // byte pointer
- DWORD dwTmp;
- pbih = (PBITMAPINFOHEADER) pbi;
- lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);
- if (!lpBits)
- errhandler("GlobalAlloc", hwnd);
- // Retrieve the color table (RGBQUAD array) and the bits
- // (array of palette indices) from the DIB.
- if (!GetDIBits(hDC, hBMP, 0, (WORD) pbih->biHeight, lpBits, pbi,
- DIB_RGB_COLORS))
- {
- errhandler("GetDIBits", hwnd);
- }
- // Create the .BMP file.
- hf = CreateFile(pszFile,
- GENERIC_READ | GENERIC_WRITE,
- (DWORD) 0,
- NULL,
- CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL,
- (HANDLE) NULL);
- if (hf == INVALID_HANDLE_VALUE)
- errhandler("CreateFile", hwnd);
- hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M"
- // Compute the size of the entire file.
- hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) +
- pbih->biSize + pbih->biClrUsed
- * sizeof(RGBQUAD) + pbih->biSizeImage);
- hdr.bfReserved1 = 0;
- hdr.bfReserved2 = 0;
- // Compute the offset to the array of color indices.
- hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) +
- pbih->biSize + pbih->biClrUsed
- * sizeof (RGBQUAD);
- // Copy the BITMAPFILEHEADER into the .BMP file.
- if (!WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER),
- (LPDWORD) &dwTmp, NULL))
- {
- errhandler("WriteFile", hwnd);
- }
- // Copy the BITMAPINFOHEADER and RGBQUAD array into the file.
- if (!WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER)
- + pbih->biClrUsed * sizeof (RGBQUAD),
- (LPDWORD) &dwTmp, ( NULL))
- errhandler("WriteFile", hwnd);
- // Copy the array of color indices into the .BMP file.
- dwTotal = cb = pbih->biSizeImage;
- hp = lpBits;
- if (!WriteFile(hf, (LPSTR) hp, (int) cb, (LPDWORD) &dwTmp,NULL))
- errhandler("WriteFile", hwnd);
- // Close the .BMP file.
- if (!CloseHandle(hf))
- errhandler("CloseHandle", hwnd);
- // Free memory.
- GlobalFree((HGLOBAL)lpBits);
- }
- [/FONT]
复制代码
我们看看getPreviewIcon函数的lisp写法
(defun C:GetPreview ()
(setq blk "1")'块名
(VL-LOAD-COM)
(apply
'strcat
(apply
'append
(mapcar '(lambda (x)
(if (= (car x) 310)
(list (cdr x))
)
)
(entget
(cdr (assoc 330 (entget (tblobjname "block" blk))))
)
)
)
)
) |
|