老师好,
这个问题可能不属于Foxtable,但在下实在找不到其他高人可以请教,恳请在不麻烦的前提下给予点拨,谢谢!
问题描述:
我用Foxtable的GDI+绘图功能绘制并保存了bmp格式的图片,需要在热敏打印机上打印成标签。
因为这类打印机都是单色打印,连灰度都不支持。我直接打印这些图片的话,总是丢失象素点导致模糊不清。无论怎样设置打印机都没有明显效果。
所以需要把这个bmp图片转成单色的bmp位图
(不是分辨率问题,因为测试了其他单色位图是可以打印清楚的;GDI+也无法直接绘制单色位图)
我在网上查找了各种方法,没有VB.net相关的。几乎都是C#的代码,这些代码都采用了指针操作。
例如:
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
public static Bitmap BitmapTo1Bpp(Bitmap img) {
int w = img.Width;
int h = img.Height;
Bitmap bmp = new Bitmap(w, h, PixelFormat.Format1bppIndexed);
BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed);
byte[] scan = new byte[(w + 7) / 8];
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
if (x % 8 == 0) scan[x / 8] = 0;
Color c = img.GetPixel(x, y);
if (c.GetBrightness() >= 0.5) scan[x / 8] |= (byte)(0x80 >> (x % 8));
}
Marshal.Copy(scan, 0, (IntPtr)((long)data.Scan0 + data.Stride * y), scan.Length);
}
bmp.UnlockBits(data);
return bmp;
}
请问这段代码用VB如何实现? 如果不能实现,那么有没有其他的解决思路? 再次感谢!
我还尝试C#转为DLL给foxtable调用,但System.Drawing.Imaging这个命名空间不能在DLL类型中用。我对C#了解几乎是0,所以也没有头绪。