11 个解决方案
#1
没有代码,不过可以给你一个思路:
不知道你合并说是重叠还是拼图?如果只是小图拼大图,直接作一个大的缓冲,然后上面draw一个,下面draw一个应该就可以了。
如果是重叠,可以设置一下绘图的模式,在同一位置将两张图draw一下应该也可以。
没试过,你试试看吧。
不知道你合并说是重叠还是拼图?如果只是小图拼大图,直接作一个大的缓冲,然后上面draw一个,下面draw一个应该就可以了。
如果是重叠,可以设置一下绘图的模式,在同一位置将两张图draw一下应该也可以。
没试过,你试试看吧。
#2
谢谢您的解答,我是想把图片1的各个像素点的rgb信息放到图片2中,使他们成为一张图片,并保存。
我听说window中有个alpha混合技术,不知道在symbian中可不可以通用。
我听说window中有个alpha混合技术,不知道在symbian中可不可以通用。
#3
参考SDK中关于CWindowGc的说明,它有一个 SetDrawMode ,你看看,里面有alpha的说明。可以写点代码试一下。
#4
我最后想把两张图片保存成一张,需要直接对两张图片的各个点的像素rgb值进行操作,以下是我写的代码。
void MyFunction()
{
delete bitmap3
bitmap3= NULL;
bitmap3= new(ELeave)CFbsBitmap();
bitmap2= &(iModel.GetDecoratedImage());
//src bitmap size
TSize bitmapSize = bitmap1->SizeInPixels();
TInt srcX = bitmapSize.iWidth;
TInt srcY = bitmapSize.iHeight;
User::LeaveIfError(bitmap3->Create(TSize(bitmapSize.iWidth, bitmapSize.iHeight), EColor16M));
TRgb bitmap1Rgb(0, 0, 0);
TRgb bitmap2Rgb(0, 0, 0);
TRgb bitmap3Rgb(0, 0, 0);
//bitmap1 rgb value
TInt bitmap1Red = 0;
TInt bitmap1Blue = 0;
TInt bitmap1Green = 0;
//bitmap2 rgb value
TInt bitmap2Red = 0;
TInt bitmap2Blue = 0;
TInt bitmap2Green = 0;
//bitmap3 rgb value
TInt bitmap3Red = 0;
TInt bitmap3Blue = 0;
TInt bitmap3Green = 0;
TInt alpha = 255;
//material bitmap size
TSize materialpSize = bitmap2->SizeInPixels();
TInt desX = materialpSize.iWidth;
TInt desY = materialpSize.iHeight;
// create the bitmap utils
TBitmapUtil decodedUtil(bitmap1);
TBitmapUtil decoratedUtil(bitmap2);
TBitmapUtil newUtil(bitmap2);
decodedUtil.Begin(TPoint(0, 0));
decoratedUtil.Begin(TPoint(0, 0), decodedUtil);
newUtil.Begin(TPoint(0, 0), decodedUtil);
for(TInt yPos = 0; yPos < srcY; yPos++)
{
decodedUtil.SetPos(TPoint(0, yPos));
decoratedUtil.SetPos(TPoint(0, yPos));
newUtil.SetPos(TPoint(0, yPos));
for(TInt xPos = 0; xPos < srcX; xPos++)
{
bitmap1->GetPixel(bitmap1Rgb, TPoint(xPos, yPos));
bitmap1Red = bitmap1Rgb.Red();
bitmap1Blue = bitmap1Rgb.Blue();
bitmap1Green = bitmap1Rgb.Green();
bitmap2Image->GetPixel(bitmap2Rgb, TPoint(xPos, yPos));
bitmap2Red = bitmap2Rgb.Red();
bitmap2Blue = bitmap2Rgb.Blue();
bitmap2Green = bitmap2Rgb.Green();
//mix color
bitmap3Red = (bitmap1Red * alpha + bitmap2Red * (255 - alpha)) / 255;
bitmap3Blue = (bitmap1Blue * alpha + bitmap2Blue * (255 - alpha)) / 255;
bitmap3Green = (bitmap1Green * alpha + bitmap2Green * (255 - alpha)) / 255;
bitmap3Rgb.SetRed(bitmap3Red);
bitmap3Rgb.SetBlue(bitmap3Blue);
bitmap3Rgb.SetGreen(bitmap3Green);
newUtil.SetPixel(bitmap3Rgb.Value());
decodedUtil.IncXPos();
decoratedUtil.IncXPos();
newUtil.IncXPos();
}
}
decodedUtil.End();
decoratedUtil.End();
newUtil.End();
iModel.SetNewImage(bitmap3Bitmap);
}
该函数是通过alpha混合原理来实现,但是效果并不是很理想。图片有点发蓝,使怎么回事啊,谢谢各位大虾解答。
难道symbian对图像处理这方面支持的不够好吗。
void MyFunction()
{
delete bitmap3
bitmap3= NULL;
bitmap3= new(ELeave)CFbsBitmap();
bitmap2= &(iModel.GetDecoratedImage());
//src bitmap size
TSize bitmapSize = bitmap1->SizeInPixels();
TInt srcX = bitmapSize.iWidth;
TInt srcY = bitmapSize.iHeight;
User::LeaveIfError(bitmap3->Create(TSize(bitmapSize.iWidth, bitmapSize.iHeight), EColor16M));
TRgb bitmap1Rgb(0, 0, 0);
TRgb bitmap2Rgb(0, 0, 0);
TRgb bitmap3Rgb(0, 0, 0);
//bitmap1 rgb value
TInt bitmap1Red = 0;
TInt bitmap1Blue = 0;
TInt bitmap1Green = 0;
//bitmap2 rgb value
TInt bitmap2Red = 0;
TInt bitmap2Blue = 0;
TInt bitmap2Green = 0;
//bitmap3 rgb value
TInt bitmap3Red = 0;
TInt bitmap3Blue = 0;
TInt bitmap3Green = 0;
TInt alpha = 255;
//material bitmap size
TSize materialpSize = bitmap2->SizeInPixels();
TInt desX = materialpSize.iWidth;
TInt desY = materialpSize.iHeight;
// create the bitmap utils
TBitmapUtil decodedUtil(bitmap1);
TBitmapUtil decoratedUtil(bitmap2);
TBitmapUtil newUtil(bitmap2);
decodedUtil.Begin(TPoint(0, 0));
decoratedUtil.Begin(TPoint(0, 0), decodedUtil);
newUtil.Begin(TPoint(0, 0), decodedUtil);
for(TInt yPos = 0; yPos < srcY; yPos++)
{
decodedUtil.SetPos(TPoint(0, yPos));
decoratedUtil.SetPos(TPoint(0, yPos));
newUtil.SetPos(TPoint(0, yPos));
for(TInt xPos = 0; xPos < srcX; xPos++)
{
bitmap1->GetPixel(bitmap1Rgb, TPoint(xPos, yPos));
bitmap1Red = bitmap1Rgb.Red();
bitmap1Blue = bitmap1Rgb.Blue();
bitmap1Green = bitmap1Rgb.Green();
bitmap2Image->GetPixel(bitmap2Rgb, TPoint(xPos, yPos));
bitmap2Red = bitmap2Rgb.Red();
bitmap2Blue = bitmap2Rgb.Blue();
bitmap2Green = bitmap2Rgb.Green();
//mix color
bitmap3Red = (bitmap1Red * alpha + bitmap2Red * (255 - alpha)) / 255;
bitmap3Blue = (bitmap1Blue * alpha + bitmap2Blue * (255 - alpha)) / 255;
bitmap3Green = (bitmap1Green * alpha + bitmap2Green * (255 - alpha)) / 255;
bitmap3Rgb.SetRed(bitmap3Red);
bitmap3Rgb.SetBlue(bitmap3Blue);
bitmap3Rgb.SetGreen(bitmap3Green);
newUtil.SetPixel(bitmap3Rgb.Value());
decodedUtil.IncXPos();
decoratedUtil.IncXPos();
newUtil.IncXPos();
}
}
decodedUtil.End();
decoratedUtil.End();
newUtil.End();
iModel.SetNewImage(bitmap3Bitmap);
}
该函数是通过alpha混合原理来实现,但是效果并不是很理想。图片有点发蓝,使怎么回事啊,谢谢各位大虾解答。
难道symbian对图像处理这方面支持的不够好吗。
#5
gc.BitBlt(TPoint(0,0),iBkImage);
gc.SetDrawMode(CWindowGc::EDrawModeNOTORNOT);
gc.BitBlt(TPoint(0,40),iBkImageMask);
我是这样试的,两张图重叠部分,其中第二张图用NOTORNOT模式,你可以换一个模式来试验。
#6
非常感谢这位朋友的指点。我再试试。
#7
建议看下EXAMPLE2D
#8
非常感谢楼上朋友们的回答。
#9
有问题请先GOOGLE,BAIDU
#10
不明LZ在说什么
#11
楼上的外行就别在这掺和,浪费时间。
本帖已结。
本帖已结。
#1
没有代码,不过可以给你一个思路:
不知道你合并说是重叠还是拼图?如果只是小图拼大图,直接作一个大的缓冲,然后上面draw一个,下面draw一个应该就可以了。
如果是重叠,可以设置一下绘图的模式,在同一位置将两张图draw一下应该也可以。
没试过,你试试看吧。
不知道你合并说是重叠还是拼图?如果只是小图拼大图,直接作一个大的缓冲,然后上面draw一个,下面draw一个应该就可以了。
如果是重叠,可以设置一下绘图的模式,在同一位置将两张图draw一下应该也可以。
没试过,你试试看吧。
#2
谢谢您的解答,我是想把图片1的各个像素点的rgb信息放到图片2中,使他们成为一张图片,并保存。
我听说window中有个alpha混合技术,不知道在symbian中可不可以通用。
我听说window中有个alpha混合技术,不知道在symbian中可不可以通用。
#3
参考SDK中关于CWindowGc的说明,它有一个 SetDrawMode ,你看看,里面有alpha的说明。可以写点代码试一下。
#4
我最后想把两张图片保存成一张,需要直接对两张图片的各个点的像素rgb值进行操作,以下是我写的代码。
void MyFunction()
{
delete bitmap3
bitmap3= NULL;
bitmap3= new(ELeave)CFbsBitmap();
bitmap2= &(iModel.GetDecoratedImage());
//src bitmap size
TSize bitmapSize = bitmap1->SizeInPixels();
TInt srcX = bitmapSize.iWidth;
TInt srcY = bitmapSize.iHeight;
User::LeaveIfError(bitmap3->Create(TSize(bitmapSize.iWidth, bitmapSize.iHeight), EColor16M));
TRgb bitmap1Rgb(0, 0, 0);
TRgb bitmap2Rgb(0, 0, 0);
TRgb bitmap3Rgb(0, 0, 0);
//bitmap1 rgb value
TInt bitmap1Red = 0;
TInt bitmap1Blue = 0;
TInt bitmap1Green = 0;
//bitmap2 rgb value
TInt bitmap2Red = 0;
TInt bitmap2Blue = 0;
TInt bitmap2Green = 0;
//bitmap3 rgb value
TInt bitmap3Red = 0;
TInt bitmap3Blue = 0;
TInt bitmap3Green = 0;
TInt alpha = 255;
//material bitmap size
TSize materialpSize = bitmap2->SizeInPixels();
TInt desX = materialpSize.iWidth;
TInt desY = materialpSize.iHeight;
// create the bitmap utils
TBitmapUtil decodedUtil(bitmap1);
TBitmapUtil decoratedUtil(bitmap2);
TBitmapUtil newUtil(bitmap2);
decodedUtil.Begin(TPoint(0, 0));
decoratedUtil.Begin(TPoint(0, 0), decodedUtil);
newUtil.Begin(TPoint(0, 0), decodedUtil);
for(TInt yPos = 0; yPos < srcY; yPos++)
{
decodedUtil.SetPos(TPoint(0, yPos));
decoratedUtil.SetPos(TPoint(0, yPos));
newUtil.SetPos(TPoint(0, yPos));
for(TInt xPos = 0; xPos < srcX; xPos++)
{
bitmap1->GetPixel(bitmap1Rgb, TPoint(xPos, yPos));
bitmap1Red = bitmap1Rgb.Red();
bitmap1Blue = bitmap1Rgb.Blue();
bitmap1Green = bitmap1Rgb.Green();
bitmap2Image->GetPixel(bitmap2Rgb, TPoint(xPos, yPos));
bitmap2Red = bitmap2Rgb.Red();
bitmap2Blue = bitmap2Rgb.Blue();
bitmap2Green = bitmap2Rgb.Green();
//mix color
bitmap3Red = (bitmap1Red * alpha + bitmap2Red * (255 - alpha)) / 255;
bitmap3Blue = (bitmap1Blue * alpha + bitmap2Blue * (255 - alpha)) / 255;
bitmap3Green = (bitmap1Green * alpha + bitmap2Green * (255 - alpha)) / 255;
bitmap3Rgb.SetRed(bitmap3Red);
bitmap3Rgb.SetBlue(bitmap3Blue);
bitmap3Rgb.SetGreen(bitmap3Green);
newUtil.SetPixel(bitmap3Rgb.Value());
decodedUtil.IncXPos();
decoratedUtil.IncXPos();
newUtil.IncXPos();
}
}
decodedUtil.End();
decoratedUtil.End();
newUtil.End();
iModel.SetNewImage(bitmap3Bitmap);
}
该函数是通过alpha混合原理来实现,但是效果并不是很理想。图片有点发蓝,使怎么回事啊,谢谢各位大虾解答。
难道symbian对图像处理这方面支持的不够好吗。
void MyFunction()
{
delete bitmap3
bitmap3= NULL;
bitmap3= new(ELeave)CFbsBitmap();
bitmap2= &(iModel.GetDecoratedImage());
//src bitmap size
TSize bitmapSize = bitmap1->SizeInPixels();
TInt srcX = bitmapSize.iWidth;
TInt srcY = bitmapSize.iHeight;
User::LeaveIfError(bitmap3->Create(TSize(bitmapSize.iWidth, bitmapSize.iHeight), EColor16M));
TRgb bitmap1Rgb(0, 0, 0);
TRgb bitmap2Rgb(0, 0, 0);
TRgb bitmap3Rgb(0, 0, 0);
//bitmap1 rgb value
TInt bitmap1Red = 0;
TInt bitmap1Blue = 0;
TInt bitmap1Green = 0;
//bitmap2 rgb value
TInt bitmap2Red = 0;
TInt bitmap2Blue = 0;
TInt bitmap2Green = 0;
//bitmap3 rgb value
TInt bitmap3Red = 0;
TInt bitmap3Blue = 0;
TInt bitmap3Green = 0;
TInt alpha = 255;
//material bitmap size
TSize materialpSize = bitmap2->SizeInPixels();
TInt desX = materialpSize.iWidth;
TInt desY = materialpSize.iHeight;
// create the bitmap utils
TBitmapUtil decodedUtil(bitmap1);
TBitmapUtil decoratedUtil(bitmap2);
TBitmapUtil newUtil(bitmap2);
decodedUtil.Begin(TPoint(0, 0));
decoratedUtil.Begin(TPoint(0, 0), decodedUtil);
newUtil.Begin(TPoint(0, 0), decodedUtil);
for(TInt yPos = 0; yPos < srcY; yPos++)
{
decodedUtil.SetPos(TPoint(0, yPos));
decoratedUtil.SetPos(TPoint(0, yPos));
newUtil.SetPos(TPoint(0, yPos));
for(TInt xPos = 0; xPos < srcX; xPos++)
{
bitmap1->GetPixel(bitmap1Rgb, TPoint(xPos, yPos));
bitmap1Red = bitmap1Rgb.Red();
bitmap1Blue = bitmap1Rgb.Blue();
bitmap1Green = bitmap1Rgb.Green();
bitmap2Image->GetPixel(bitmap2Rgb, TPoint(xPos, yPos));
bitmap2Red = bitmap2Rgb.Red();
bitmap2Blue = bitmap2Rgb.Blue();
bitmap2Green = bitmap2Rgb.Green();
//mix color
bitmap3Red = (bitmap1Red * alpha + bitmap2Red * (255 - alpha)) / 255;
bitmap3Blue = (bitmap1Blue * alpha + bitmap2Blue * (255 - alpha)) / 255;
bitmap3Green = (bitmap1Green * alpha + bitmap2Green * (255 - alpha)) / 255;
bitmap3Rgb.SetRed(bitmap3Red);
bitmap3Rgb.SetBlue(bitmap3Blue);
bitmap3Rgb.SetGreen(bitmap3Green);
newUtil.SetPixel(bitmap3Rgb.Value());
decodedUtil.IncXPos();
decoratedUtil.IncXPos();
newUtil.IncXPos();
}
}
decodedUtil.End();
decoratedUtil.End();
newUtil.End();
iModel.SetNewImage(bitmap3Bitmap);
}
该函数是通过alpha混合原理来实现,但是效果并不是很理想。图片有点发蓝,使怎么回事啊,谢谢各位大虾解答。
难道symbian对图像处理这方面支持的不够好吗。
#5
gc.BitBlt(TPoint(0,0),iBkImage);
gc.SetDrawMode(CWindowGc::EDrawModeNOTORNOT);
gc.BitBlt(TPoint(0,40),iBkImageMask);
我是这样试的,两张图重叠部分,其中第二张图用NOTORNOT模式,你可以换一个模式来试验。
#6
非常感谢这位朋友的指点。我再试试。
#7
建议看下EXAMPLE2D
#8
非常感谢楼上朋友们的回答。
#9
有问题请先GOOGLE,BAIDU
#10
不明LZ在说什么
#11
楼上的外行就别在这掺和,浪费时间。
本帖已结。
本帖已结。