📄 design.c
字号:
IPI_GetPixelValue(GreenPlane,x+1,y+2,&value7);
IPI_GetPixelValue(GreenPlane,x+1,y+3,&value8);
IPI_GetPixelValue(GreenPlane,x+2,y,&value9);
IPI_GetPixelValue(GreenPlane,x+2,y+1,&value10);
IPI_GetPixelValue(GreenPlane,x+2,y+2,&value11);
IPI_GetPixelValue(GreenPlane,x+2,y+3,&value12);
IPI_GetPixelValue(GreenPlane,x+3,y,&value13);
IPI_GetPixelValue(GreenPlane,x+3,y+1,&value14);
IPI_GetPixelValue(GreenPlane,x+3,y+2,&value15);
IPI_GetPixelValue(GreenPlane,x+3,y+3,&value16);
average=(value1+value2+value3+value4+value5+value6+value7+value8+value9+ //求平均值
value10+value11+value12+value13+value14+value15+value16)/16;
IPI_SetPixelValue(TempGreen,x,y,average);
IPI_SetPixelValue(TempGreen,x,y+1,average); //新图像赋值
IPI_SetPixelValue(TempGreen,x,y+2,average);
IPI_SetPixelValue(TempGreen,x,y+3,average);
IPI_SetPixelValue(TempGreen,x,y+4,average);
IPI_SetPixelValue(TempGreen,x+1,y,average);
IPI_SetPixelValue(TempGreen,x+1,y+1,average);
IPI_SetPixelValue(TempGreen,x+1,y+2,average);
IPI_SetPixelValue(TempGreen,x+1,y+3,average);
IPI_SetPixelValue(TempGreen,x+1,y+4,average);
IPI_SetPixelValue(TempGreen,x+2,y,average);
IPI_SetPixelValue(TempGreen,x+2,y+1,average);
IPI_SetPixelValue(TempGreen,x+2,y+2,average);
IPI_SetPixelValue(TempGreen,x+2,y+3,average);
IPI_SetPixelValue(TempGreen,x+2,y+4,average);
IPI_SetPixelValue(TempGreen,x+3,y,average);
IPI_SetPixelValue(TempGreen,x+3,y+1,average);
IPI_SetPixelValue(TempGreen,x+3,y+2,average);
IPI_SetPixelValue(TempGreen,x+3,y+3,average);
IPI_SetPixelValue(TempGreen,x+3,y+4,average);
IPI_SetPixelValue(TempGreen,x+4,y,average);
IPI_SetPixelValue(TempGreen,x+4,y+1,average);
IPI_SetPixelValue(TempGreen,x+4,y+2,average);
IPI_SetPixelValue(TempGreen,x+4,y+3,average);
IPI_SetPixelValue(TempGreen,x+4,y+4,average);
y=y+4;
}
x=x+4;
}
//蓝色通道马赛克
for(x=0;x<width;)
{
for(y=0;y<height;)
{
IPI_GetPixelValue(BluePlane,x,y,&value1);
IPI_GetPixelValue(BluePlane,x,y+1,&value2);
IPI_GetPixelValue(BluePlane,x,y+2,&value3);
IPI_GetPixelValue(BluePlane,x,y+3,&value4);
IPI_GetPixelValue(BluePlane,x+1,y,&value5);
IPI_GetPixelValue(BluePlane,x+1,y+1,&value6);
IPI_GetPixelValue(BluePlane,x+1,y+2,&value7);
IPI_GetPixelValue(BluePlane,x+1,y+3,&value8);
IPI_GetPixelValue(BluePlane,x+2,y,&value9);
IPI_GetPixelValue(BluePlane,x+2,y+1,&value10);
IPI_GetPixelValue(BluePlane,x+2,y+2,&value11);
IPI_GetPixelValue(BluePlane,x+2,y+3,&value12);
IPI_GetPixelValue(BluePlane,x+3,y,&value13);
IPI_GetPixelValue(BluePlane,x+3,y+1,&value14);
IPI_GetPixelValue(BluePlane,x+3,y+2,&value15);
IPI_GetPixelValue(BluePlane,x+3,y+3,&value16);
average=(value1+value2+value3+value4+value5+value6+value7+value8+value9+
value10+value11+value12+value13+value14+value15+value16)/16;
IPI_SetPixelValue(TempBlue,x,y,average);
IPI_SetPixelValue(TempBlue,x,y+1,average);
IPI_SetPixelValue(TempBlue,x,y+2,average);
IPI_SetPixelValue(TempBlue,x,y+3,average);
IPI_SetPixelValue(TempBlue,x,y+4,average);
IPI_SetPixelValue(TempBlue,x+1,y,average);
IPI_SetPixelValue(TempBlue,x+1,y+1,average);
IPI_SetPixelValue(TempBlue,x+1,y+2,average);
IPI_SetPixelValue(TempBlue,x+1,y+3,average);
IPI_SetPixelValue(TempBlue,x+1,y+4,average);
IPI_SetPixelValue(TempBlue,x+2,y,average);
IPI_SetPixelValue(TempBlue,x+2,y+1,average);
IPI_SetPixelValue(TempBlue,x+2,y+2,average);
IPI_SetPixelValue(TempBlue,x+2,y+3,average);
IPI_SetPixelValue(TempBlue,x+2,y+4,average);
IPI_SetPixelValue(TempBlue,x+3,y,average);
IPI_SetPixelValue(TempBlue,x+3,y+1,average);
IPI_SetPixelValue(TempBlue,x+3,y+2,average);
IPI_SetPixelValue(TempBlue,x+3,y+3,average);
IPI_SetPixelValue(TempBlue,x+3,y+4,average);
IPI_SetPixelValue(TempBlue,x+4,y,average);
IPI_SetPixelValue(TempBlue,x+4,y+1,average);
IPI_SetPixelValue(TempBlue,x+4,y+2,average);
IPI_SetPixelValue(TempBlue,x+4,y+3,average);
IPI_SetPixelValue(TempBlue,x+4,y+4,average);
y=y+4;
}
x=x+4;
}
//重新合成图像
IPI_ReplaceColorPlanes (SourceImage1, DestImage1, TempRed,
TempGreen, TempBlue, IPI_RGB);
IPI_WriteFile (DestImage1, "C:\\Documents and Settings\\All Users\\Documents\\temp3.bmp", IPI_FILE_BMP, NULL,
NULL);
GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp3.bmp", &DstImg);
CanvasDrawBitmap (panelHandle, PANEL_CANVAS_3, DstImg, VAL_ENTIRE_OBJECT,
VAL_ENTIRE_OBJECT);
DiscardBitmap(DstImg);
Proc=3;
}
//图像的屏蔽与叠加
void CVICALLBACK proc4 (int menuBar, int menuItem, void *callbackData,
int panel)
{
IPIError lError;
int lStatus;
char lPath[260];
//选择另一图像
lStatus = FileSelectPopup (".\\image.", "*.apd;*.bmp;*.tif", "", "",
VAL_LOAD_BUTTON, 0, 0, 1, 0, lPath);
if (lStatus == VAL_EXISTING_FILE_SELECTED)
{
/* Read the file into the source image */
lError = IPI_ReadFile (SourceImage2, lPath, FALSE, NULL, NULL);
if (lError == IPI_ERR_NOERROR)
{
IPIImageInfo Image_Info1;
IPIImageInfo Image_Info2;
static int width,width1,width2,height,height1,height2,x,y,x_dup,y_dup;
//IPI_Copy (SourceImage1, DestImage2);
IPI_GetImageInfo (SourceImage1, &Image_Info1); //读出图像信息
IPI_GetImageInfo (SourceImage2, &Image_Info2);
width1=Image_Info1.width;
width2=Image_Info2.width;
height1=Image_Info1.height;
height2=Image_Info2.height;
width=(width1>=width2)?width1:width2;
height=(height1>=Image_Info2.height)? height1:height2;
x_dup=width/width1;
y_dup=height/height1;
IPI_Expand (SourceImage1, DestImage2, x_dup,
y_dup, IPI_FULL_RECT); //设置目标图像大小
//目标图像赋值
/*for (x=0;x<height2;x++)
{
for (y=0;y<width2;y++)
{
int color_value; // 此法运行较慢,所以直接用库函数 IPI_ImageToImage()
IPI_GetColorPixel (SourceImage2, x, y, &color_value);
IPI_SetColorPixel (DestImage2, x, y, color_value);
}
}
*/
//IPI_ImageToImage (SourceImage1, DestImage2, 0, 0);
IPI_ImageToImage (SourceImage2, DestImage2, 0, 0);
IPI_WriteFile (DestImage2, "C:\\Documents and Settings\\All Users\\Documents\\temp4.bmp", IPI_FILE_BMP, NULL,
NULL);
GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp4.bmp", &DstImg);
CanvasDrawBitmap (panelHandle, PANEL_CANVAS_4, DstImg, VAL_ENTIRE_OBJECT,
VAL_ENTIRE_OBJECT);
DiscardBitmap(DstImg);
Proc=4;
}
}
}
// Laplican素描
void CVICALLBACK proc5 (int menuBar, int menuItem, void *callbackData,
int panel)
{
IPIImageInfo Image_Info;
int x,y,width,height;
float val;
float value,value1,value2,value3,value4,sum1,sum2,dif,a,b;
if (Proc!=1 && Proc!=2) //判断源图像是否已经改变
{
IPI_Cast (TempImage, IPI_PIXEL_U8);
IPI_Copy (TempImage, TempImage1);
}
//平滑
//IPI_NthOrder (TempImage1, IPI_NOMASK, TempImage1, 3, 3, 5);
IPI_GetImageInfo (TempImage1, &Image_Info); //读出图像信息
width=Image_Info.width;
height=Image_Info.height;
//拉普拉斯算子锐化,素描
IPI_Copy (TempImage1, TempImage5);
for (x=0;x<width;x++)
{
IPI_GetPixelValue(TempImage1,x,0,&a); //设置增加行和列
IPI_GetPixelValue(TempImage1,0,x,&b);
IPI_SetPixelValue(TempImage1,x,-1,a);
IPI_SetPixelValue(TempImage1,-1,x,b);
}
for(x=0;x<width;x++)
{
for(y=0;y<height;y++)
{
IPI_GetPixelValue(TempImage1,x,y,&value); //拉普拉斯边缘检测
IPI_GetPixelValue(TempImage1,x+1,y,&value1);
IPI_GetPixelValue(TempImage1,x-1,y,&value2);
IPI_GetPixelValue(TempImage1,x,y+1,&value3);
IPI_GetPixelValue(TempImage1,x,y-1,&value4);
sum1=4*value;
sum2=value1+value2+value3+value4;
dif=255-fabs(sum1-sum2);
IPI_SetPixelValue(TempImage5,x,y,dif);
}
}
/*
通过腐蚀膨胀可以优化素描后的效果,可继续添加程序代码
*/
IPI_WriteFile (TempImage5, "C:\\Documents and Settings\\All Users\\Documents\\temp5.bmp", IPI_FILE_BMP, NULL,
NULL);
GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp5.bmp", &DstImg);
CanvasDrawBitmap (panelHandle, PANEL_CANVAS_5, DstImg, VAL_ENTIRE_OBJECT,
VAL_ENTIRE_OBJECT);
DiscardBitmap(DstImg);
Proc=5;
}
//三色板图像查看
void CVICALLBACK rgbshow (int menuBar, int menuItem, void *callbackData,
int panel)
{
IPIImageInfo image_info;
int key_code,width,height,g,h;
Proc=6;
//弹出操作提示
MessagePopup ("提示", "按ENTER键在三色间转换,四次按键后退出.");
//读取RGB Plane
IPI_ReadFile (SourceImage1, lPath, TRUE, NULL, NULL);
IPI_ExtractColorPlanes (SourceImage1, RedPlane, GreenPlane,
BluePlane, IPI_RGB);
//设置一块模板,用于取代彩色的其中两个色板
//IPI_Cast (SourceImage1, IPI_PIXEL_U8);
IPI_Copy (RedPlane, MaskPlane);
IPI_GetImageInfo (MaskPlane, &image_info);
width=image_info.width;
height=image_info.height;
for (g=0;g<height;g++) //赋值0.0,黑色
{
for (h=0;h<width;h++)
IPI_SetPixelValue (MaskPlane, h, g, 0.0);
}
//设置标准输入窗口的属性
SetStdioWindowPosition (-100, -100); //在可见范围之外
SetStdioWindowSize (10, 10);
SetStdioWindowOptions (100, 0, 0);
SetStdioWindowVisibility (0);
//红色
key_code = GetKey(); //获取键盘操作
if (key_code==VAL_ENTER_VKEY) //VAL_ENTER_VKEY ,,是否按回车
{
//IPI_Cast (RedPlane, IPI_PIXEL_RGB32);
IPI_ReplaceColorPlanes (SourceImage1, DestImage1, IPI_NOIMAGE, //只留下一块色板
MaskPlane, MaskPlane, IPI_RGB);
IPI_WriteFile (DestImage1, "C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", IPI_FILE_BMP, NULL,
NULL);
GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", &SrcImg);
CanvasClear (panelHandle, PANEL_CANVAS_0, VAL_ENTIRE_OBJECT);
CanvasDrawBitmap (panelHandle, PANEL_CANVAS_0, SrcImg,
VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);
DiscardBitmap(SrcImg);
}
//else if (key_code==VAL_ESC_VKEY) break; //中断
//红色结束,绿色开始
key_code = GetKey();
if (key_code==VAL_ENTER_VKEY)
{
IPI_ReplaceColorPlanes (SourceImage1, DestImage1, MaskPlane,
IPI_NOIMAGE, MaskPlane, IPI_RGB);
IPI_WriteFile (DestImage1, "C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", IPI_FILE_BMP, NULL,
NULL);
GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", &SrcImg);
CanvasClear (panelHandle, PANEL_CANVAS_0, VAL_ENTIRE_OBJECT);
CanvasDrawBitmap (panelHandle, PANEL_CANVAS_0, SrcImg,
VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);
DiscardBitmap(SrcImg);
}
//else if (key_code==VAL_ESC_VKEY) break;
//绿色结束,蓝色开始
key_code = GetKey();
if (key_code==VAL_ENTER_VKEY)
{
IPI_ReplaceColorPlanes (SourceImage1, DestImage1, MaskPlane,
MaskPlane, IPI_NOIMAGE, IPI_RGB);
IPI_WriteFile (DestImage1, "C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", IPI_FILE_BMP, NULL,
NULL);
GetBitmapFromFile ("C:\\Documents and Settings\\All Users\\Documents\\temp6.bmp", &SrcImg);
CanvasClear (panelHandle, PANEL_CANVAS_0, VAL_ENTIRE_OBJECT);
CanvasDrawBitmap (panelHandle, PANEL_CANVAS_0, SrcImg,
VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);
DiscardBitmap(SrcImg);
}
//else if (key_code==VAL_ESC_VKEY) break;
//换回原图
key_code = GetKey();
if (key_code==VAL_ENTER_VKEY)
{
GetBitmapFromFile (lPath, &SrcImg);
CanvasClear (panelHandle, PANEL_CANVAS_0, VAL_ENTIRE_OBJECT);
CanvasDrawBitmap (panelHandle, PANEL_CANVAS_0, SrcImg,
VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);
DiscardBitmap(SrcImg);
}
//else if (key_code==VAL_ESC_VKEY) break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -