コード例 #1
0
ファイル: XShade.c プロジェクト: EmmanuelCharpentier/fricas
int
XInitShades(Display *display, int screen)
{
    char *bits;
    int count;
    int chars_bitmap = char_bitmap();
    int bit;

    bits = (char *) malloc(chars_bitmap * sizeof(char));

    for (count = 0; count < XShadeMax; count++) {

        /* Load in the next bitmap */

        for (bit = 0; bit < chars_bitmap; bit++)
            bits[bit] = XShadeBits[count * chars_bitmap + bit];

        /* Create it and put it into the Pixmap array */

        XShade[count] = XCreatePixmapFromBitmapData(display,
                                                RootWindow(display, screen),
                                                    bits,
                                                    XShadeWidth, XShadeWidth,
                                                BlackPixel(display, screen),
                                                WhitePixel(display, screen),
                                            DisplayPlanes(display, screen));
    }
    TileGC = XCreateGC(display, RootWindow(display, screen), 0, NULL);
    XSetFillStyle(display, TileGC, FillTiled);
    XSetTile(display, TileGC, XShade[XShadeMax / 2]);
    return XShadeMax;
}
コード例 #2
0
std::tuple<cv::Mat, cv::Mat, signed int, signed int> FreeTypeTextPrinter::GetCharMat() const
{
	// bitmap_left为左距  bitmap_top为图形顶部到基线的距离基线
	auto &bitmap = ft_face_->glyph->bitmap;

	// 就地构造 免除手动内存拷贝  注意,生成下一个字符时内存会被清除
	cv::Mat char_bitmap(cv::Size(bitmap.width, bitmap.rows), CV_8U, bitmap.buffer);
	cv::Mat char_img;
	// 处理非打印字符问题
	if (0 != char_bitmap.rows || 0 != char_bitmap.cols)
	{
		char_img = char_bitmap.clone();
	}
	else
	{
		char_img = cv::Mat(cv::Size(std::max(bitmap.width, empty_width_), std::max(bitmap.rows, empty_width_)), CV_8U, cv::Scalar(0));
	}

	cvtColor(char_img, char_img, CV_GRAY2BGR);

	cv::Mat mask;	// 填涂掩码  用来挖除目标图像的掩码区域以便去除字体色彩不饱和导致字体模糊的副作用
	bitwise_not(char_img, mask);

	LUT(char_img, color_lut_, char_img);

	return std::make_tuple(char_img, mask, ft_face_->glyph->bitmap_top, ft_face_->glyph->bitmap_left);
}