Tag: 位图

在C中创建位图 – 如何将/ r / n写为1个字节?

我正在尝试在C中创建位图。首先,我想要做的是复制标头和来自其他位图文件的所有像​​素数据。 问题是数字’10’,当我读它时只有1个字节,但当我写它的2个字节时。 我知道/ r / n的事情,但是如何将Paint保存为1个字符? 我正在以这种方式阅读标题: unsigned char* header = malloc(54); fread(header, sizeof(unsigned char), 54, file); 并以这种方式写作: fwrite(img->fileHeader, sizeof(unsigned char), 54, file);

使用C模糊对位图的影响

我在mp4上编写应用模糊滤镜的程序。 我用ffmpeg从mp4中提取bmp文件。 但模糊结果是错误的。 图片的某些部分已正确模糊,但其他部分的颜色错误。 原始图片http://sofzh.miximages.com/c/XS4yqNd.jpg 模糊的图像http://sofzh.miximages.com/c/IbcxxA4.jpg 这是用于读取bmp,应用模糊和写入bmp文件的代码。 int blur(char* input, char *output) { //variable dec: FILE *fp,*out; bitmap_header* hp; int n,x,xx,y,yy,ile, avgR,avgB,avgG,B,G,R; char *data; int blurSize = 5; //Open input file: fp = fopen(input, “r”); if(fp==NULL){ //cleanup } //Read the input file headers: hp=(bitmap_header*)malloc(sizeof(bitmap_header)); if(hp==NULL) return 3; n=fread(hp, sizeof(bitmap_header), 1, fp); if(nbitmapsize); if(data==NULL){ //cleanup } […]

什么是优秀的C / C ++算法,用于通过抖动将24位位图转换为16位?

我一直在寻找一种优化(即快速)算法,该算法使用抖动将24位RGB位图转换为16位(RGB565)位图。 我正在寻找C / C ++中的东西,我可以实际控制如何应用抖动。 GDI +似乎提供了一些方法,但我不知道它们是否会抖动。 并且,如果他们做了抖动,他们使用什么机制(Floyd-Steinberg?) 有没有人有一个很好的位图颜色深度转换与抖动的例子?

带有位图字体的C头文件

我需要对像素缓冲区进行一些基本的文本渲染,我认为有一个由char索引的表,字母表示为二进制数组就足够了……有人知道这样的免费标题吗? 例: char data[256][8][8]; void init() { data[‘a’] = { {0,0,1,1,1,0,0,0}, {0,1,0,0,0,1,0,0}, {0,0,0,0,0,0,1,0}, {0,0,1,1,1,0,1,0}, {0,1,0,0,0,1,1,0}, {0,1,0,0,0,0,1,0}, {0,1,0,0,0,1,1,0}, {0,0,1,1,1,0,1,0}, }; } 我可以继续使用其余的字母表,但后来我不需要问…¡但这给了我一个想法! 如果没有可用的位图字体的免费标题,每个答案都可以实现一个字母,我可以在这里组装整个文件^ _ ^

如何为32位位图生成单色位掩码

在Win32下,通过执行以下操作,从位图生成单色位掩码以实现透明度使用是一种常见技术: SetBkColor(hdcSource, clrTransparency); VERIFY(BitBlt(hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, hdcSource, 0, 0, SRCCOPY)); 这假设hdcSource是一个保存源图像的内存DC,而hdcMask是一个内存DC,它保存相同大小的单色位图(因此两者都是32×32,但源是4位颜色,而目标是1位单色)。 但是,当源为32位颜色+ alpha时,这对我来说似乎失败了。 我得到的是一个全黑的面具,而不是在hdcMask中获得单色位图。 没有位设置为白色(1)。 而这适用于4位彩色光源。 我的搜索foo失败了,因为我似乎找不到任何对这个特定问题的引用。 我已经发现这确实是我的代码中的问题:即如果我使用16色(4位)的源位图,它可以工作; 如果我使用32位图像,它会产生全黑色蒙版。 在32位彩色图像的情况下,我应该使用另一种方法吗? alpha通道是否存在覆盖上述技术正常行为的问题? 感谢您提供的任何帮助! ADDENDUM:我仍然无法找到为我的GDI +生成的源位图创建有效单色位图的技术。 我有点缓解了我的特殊问题,根本就是根本不生成单色位掩码,而是我正在使用TransparentBlt(),这似乎是正确的(但我不知道他们在内部做了什么,这是任何不同的允许他们正确掩盖图像)。 拥有一个非常好的,有效的function可能是有用的: HBITMAP CreateTransparencyMask(HDC hdc, HBITMAP hSource, COLORREF crTransparency); 无论hSource的颜色深度如何,它始终会创建有效的透明蒙版。 想法?

填充位图像素arrays

我正在制作一个在C中创建位图文件的程序,它使用的是24位颜色。 我正在分3个阶段编写文件,首先编写FileHeader,然后编写InfoHeader,然后编写像素数据。 我在填充像素数据时遇到问题,因此每行都在字边界上完成。 下面的代码有时会工作 ,但只有没有while循环(它将填充添加到行的末尾)。 例如,对于12×12像素的图像,我可以将其缩放到24×24,但不能缩放到10×10(文件已损坏)。 当我输入下面的填充代码时,图像会变形,有时也会损坏。 我似乎无法弄清楚出了什么问题,下面的代码应该在每行的末尾添加填充,直到我遇到一个单词边界,然后开始下一行。 fwrite(&fh, 1, sizeof(FILEHEADER), n_img); fwrite(&ih, 1, sizeof(INFOHEADER), n_img); int i, j; uint8_t pad = 0; for (i = height-1; i >= 0; i–) { for (j = 0; j < width; j++) fwrite(n_pix+(i*width)+j, 1, sizeof(IMAGE), n_img); while(ftell(n_img)%4 != 0) fwrite(&pad, 1, 1, n_img); }

数字中设置的位数

以下是一个神奇的公式,它给出了一个数字中设置的位数。 /*Code to Calculate count of set bits in a number*/ int c; int v = 7; v = v – ((v >> 1) & 0x55555555); // reuse input as temporary v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) […]

Objective C – 将UIImage保存为BMP文件

已经提出了类似的问题,但它们总是包含“使用UIImagePNGRepresentation或UIImageJPEGRepresentation”的答案,这对我来说不起作用。 我需要将文件保存为位图。 根据我的理解,UIImage数据已经是位图。 在这种情况下,我不必创建位图。 或者我呢? 我发现有人发布了这个问题,但我不确定究竟是什么答案,因为我不清楚。 我甚至创建了一个char指针数组,但我仍然不知道如何将其保存为位图。 有没有人可以帮我理解如何将UIImage保存为位图? 或者告诉我步骤,我会研究这些步骤。 谢谢。 编辑: 我发现这个教程 (带代码)用于将图像转换为位图,但返回的位图是unsigned char *。 无论是我走在正确的道路上还是走错了方向。 所以现在我要看看是否可以将unsigned char *写入.bmp文件。

在C中创建BMP文件(位图)

我试图用C代码创建一个位图。 我正在尝试制作一个非常简单的.bmp图像,高度为1像素,宽度为4像素,所有白色像素。 我已阅读格式说明并尝试应用它。 这导致以下代码: char bitmap[1000]; void BMPmake() { // — FILE HEADER — // // bitmap signature bitmap[0] = ‘B’; bitmap[1] = ‘M’; // file size bitmap[2] = 66; // 40 + 14 + 12 bitmap[3] = 0; bitmap[4] = 0; bitmap[5] = 0; // reserved field (in hex. 00 00 00 00) for(int […]

C中的位图是什么?

位图是位数组 。 它是如何在C中实现的?