帮我看看有关图片的操作。
美工做了一个字符列表,每一个字符所占的矩形长17 高 16,美工做的这个字符列图片大小是374*16 也就是一个横条图片。上面有22个字,现在我需要做的就是从这个图片中读取出每一个字,同样还有一个大小相同的MASK图片,我也要得到每一个mask字。现在问题是,我可以正常取得第一个字,而从第二个字开始,我发现都显示不出来,我不知道问题出在哪里,希望有这方面经验的朋友指点一下。下面是我取每一个字的过程
CFbsBitmap* pbitmap = NULL;
CFbsBitmap* pbitmapMask = NULL;
CFbsBitGc* pbitmapGc;
CFbsBitmapDevice* ibitmapDevice;
CFbsBitGc* pbitmapMaskGc;
CFbsBitmapDevice* ibitmapMaskDevice;
pbitmap = new (ELeave) CFbsBitmap;
pbitmapMask = new(ELeave) CFbsBitmap;
User::LeaveIfError(pbitmap->Create(TSize(17, 16), EColor16M));
User::LeaveIfError(pbitmapMask->Create(TSize(17, 16), EColor16M));
ibitmapDevice = CFbsBitmapDevice::NewL(pbitmap);
User::LeaveIfError(ibitmapDevice->CreateContext(pbitmapGc));
ibitmapMaskDevice = CFbsBitmapDevice::NewL(pbitmapMask);
User::LeaveIfError(ibitmapMaskDevice->CreateContext(pbitmapMaskGc));
//取第一个字
rect.SetRect(0, 0, 17, 16);
//取第二个字
//rect.SetRect(17, 0, 17, 16);
//取第三个字
//rect.SetRect(34, 0, 17, 16);
pbitmapGc->BitBlt(TPoint(0,0), iWordListBmp, rect);
pbitmapMaskGc->BitBlt(TPoint(0,0), iWordListMaskBmp, rect);
rect.SetRect(0, 0, 17, 16);
//显示这个字
gc.BitBltMasked(point, pbitmap, rect, pbitmapMask, ETrue); --------------------编程问答-------------------- 第二个字rect难道不是(17,0,34,16)? --------------------编程问答-------------------- gc.BitBltMasked(point, pbitmap, rect, pbitmapMask, ETrue);
你注意检查一下第二个图片以后point和rect的值能不能对应上 --------------------编程问答-------------------- pbitmap->Create(TSize(17, 16), EColor16M)只能对应一张位图,让美工把374*16 也就是一个横条图片切成n个17*16小图,然后再循环读取。 --------------------编程问答-------------------- 谢谢上面的各位,问题没有解决,我尝试了很多办法,我找了另一个图也还是同样的问题。现在我让美工直接做成单独的而非一个整块。
--------------------编程问答-------------------- 呵呵,楼主应该是犯了个小毛病了,你的Rect的设置应该是有问题的
//rect.SetRect(17, 0, 17, 16); 你所想的这块区域应该为:rect.SetRect(TPoint(17, 0),TSize( 17, 16 ));
再试下吧
--------------------编程问答-------------------- 好,听你的,我试下
补充:移动开发 , Symbian