2010年6月22日 星期二

print bitmap font array

先定義一下bitmap格式方便之後處裡
typedef struct Bitmap_ {
    int             x;
    int             y;
    unsigned int    width;
    unsigned int    height;
    unsigned int    pitch;
    unsigned char*  data;

} Bitmap;
下面是完整的程式,執行後將列印出一個大寫的F

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>

typedef struct Bitmap_ {
    int             x;
    int             y;
    unsigned int    width;
    unsigned int    height;
    unsigned int    pitch;
    unsigned char*  data;

} Bitmap;

void printtext(Bitmap *bitmap)
{
    for(int j=0; j<bitmap->height; j++) {
        for(int i=0; i<bitmap->pitch; i++) {
            for(int k=7; k>=0; k--) {
                if(7-k+i*8 == bitmap->width)
                    break;
                wprintf(L"%c", (bitmap->data[i+j*bitmap->pitch] & 0x1<<k)?L'■':L'□');
            }
        }
        printf("\n");
    }
}

int main(int argc, char *argv[])
{
    if (!setlocale(LC_CTYPE, "")) {
        return EXIT_FAILURE;
    }

    unsigned char rasters[24] = { 0xff,0xc0,
                                  0xff,0xc0,
                                  0xc0,0x00,
                                  0xc0,0x00,
                                  0xc0,0x00,
                                  0xff,0x00,
                                  0xff,0x00,
                                  0xc0,0x00,
                                  0xc0,0x00,
                                  0xc0,0x00,
                                  0xc0,0x00,
                                  0xc0,0x00
                                };

    Bitmap bitmap = {0, 0, 10, 12, 2, rasters};
    printtext(&bitmap);
    return EXIT_SUCCESS;
}

2010年3月30日 星期二

專案交接

1.建置環境
必須建立實作一套可以在命令列下完成 init, build, package, install, test 動作的建置程序,並且包涵需要之套件軟體。視專案內容,這套建置程序可能是一份 build.xml(ant), 也可能是一份 Makefile ,或是更基礎的 shell script。重點是,這套建置程序要能交由建置系統自動執行並完成上述所有動作,整個過程不可以有人工輸入的部份。

2.環境說明文件
必須說明專案以及所需套件軟體和函式庫的用途。

3.專案uml圖

4.程式碼文件
開頭必須作文件簡介,及各函式簡介和修改紀錄
函式前必須詳細說明函式功能,包涵輸入及輸出說明


參考資料

2010年1月24日 星期日

如何在建立windows執行檔的版本資訊

打開rc檔
加入
VALUE "CompanyName", "公司\0"
VALUE "FileVersion", "檔案版本\0"
VALUE "FileDescription", "描述\0"
VALUE "InternalName", "內部名稱\0"
VALUE "LegalCopyright", "著作權\0"
VALUE "LegalTrademarks", "合法商標\0"
VALUE "OriginalFilename", "原始檔名\0"
VALUE "ProductName", "產品名稱\0"
VALUE "ProductVersion", "產品版本\0"
VALUE "Comments", "註解\0"
斷行要用\r\n

2010年1月6日 星期三

Wheel Light 模擬器

這是最近替公司產品寫的模擬器。主要是用Qt+OpenGL寫出來的。
有美工人員就是不一樣^.^

2009年11月13日 星期五

Qt 專案管理

假設有一個母專案MyWholeApp
其中有一個子專案在子資料夾DummyDlg中

在DummyDlg中
建立一檔案名為DummyDlg.pri
其中內容為
FORMS += $$PWD/dummydlg.ui
HEADERS += $$PWD/dummydlg.h
SOURCES += $$PWD/dummydlg.cpp

修改專案檔DummyDlg.pro
TEMPLATE = app
DEPENDPATH += .
INCLUDEPATH += .
include(DummyDlg.pri)
# Input
SOURCES += main.cpp

這樣子專案就建立完成了

至於母專案如何利用子專案
WholeApp.pro
TEMPLATE = app
DEPENDPATH += . DummyDlg
INCLUDEPATH += . DummyDlg
include(DummyDlg/DummyDlg.pri)
# Input
FORMS += OtherDlg.ui
HEADERS += OtherDlg.h
SOURCES += OtherDlg.cpp
WholeApp.cpp

2009年10月21日 星期三

將widget存成圖檔

#include <QApplication>
#include <QLabel>
#include <QTextCodec>
#include <QRgb>

int main(int argc, char *argv[]) {
QApplication app(argc, argv);

QTextCodec *codec = QTextCodec::codecForName("Big5-ETen");

QLabel *label = new QLabel;
label->setText(codec->toUnicode("<center><h1>Qt4 學習筆記</h1>~yycking.blogspot.com</center>"));

label->setStyleSheet("QLabel { background-color: white; }");
label->adjustSize();

label->show();

QImage image = QPixmap::grabWidget(label).toImage();
image = image.convertToFormat(QImage::Format_Indexed8);

QVector<QRgb> indexs=image.colorTable();
for (int i = 0; i < indexs.size(); ++i) {
int r=qRed(indexs[i]);
int g=qGreen(indexs[i]);
int b=qBlue(indexs[i]);
int a=qGray(indexs[i]);
indexs[i]=qRgba(r,g,b,255-a);
}

image.setColorTable(indexs);
image.save("somefile.PNG");

return app.exec();
}



這個方法只簡易的將Gray代替alpha而已的圖