1. <source id="nejs2"></source>
  2. <video id="nejs2"></video>
    <source id="nejs2"></source>
          1. 首頁 > 筆記大全 > 易語言對比圖片是否一致的方法

            易語言對比圖片是否一致的方法

            更新:

            本文旨在介紹如何使用易語言編寫對比圖片是否一致的程序。

            一、讀取圖片

            要想對比兩張圖片是否一致,首先需要將這兩張圖片讀取進來。易語言中可以使用GDI+來讀取圖片。

            // 導入GDI+模塊
            #include "gdiplus.e"
            
            // 讀取圖片
            image1 = Gdip_CreateBitmapFromFile("image1.jpg")
            image2 = Gdip_CreateBitmapFromFile("image2.jpg")
            

            二、獲取圖片大小

            得到兩張圖片后,需要先判斷它們是否大小一致。使用GetImageWidth和GetImageHeight可以很容易地獲取圖片的寬度和高度。

            // 獲取圖片寬度和高度
            w1 = Gdip_GetImageWidth(image1)
            h1 = Gdip_GetImageHeight(image1)
            w2 = Gdip_GetImageWidth(image2)
            h2 = Gdip_GetImageHeight(image2)
            

            三、像素點對比

            得到圖片的大小后,接下來需要對比兩張圖片的每一個像素點是否一致??梢允褂肎dip_BitmapLockBits和Gdip_BitmapUnlockBits函數來鎖定位圖的數據。再使用指針遍歷位圖的像素點進行對比。

            // 鎖定位圖數據
            Gdip_BitmapLockBits(image1, rect, GDIP_IMAGELOCKMODE_READ, pixelFormat, &bitmapData1)
            Gdip_BitmapLockBits(image2, rect, GDIP_IMAGELOCKMODE_READ, pixelFormat, &bitmapData2)
            ptr1 = bitmapData1.Scan0
            ptr2 = bitmapData2.Scan0
            
            // 遍歷像素點
            for(i = 0; i < h1; i++) {
                for(j = 0; j < w1; j++) {
                    // 獲取像素點信息
                    pixel1 = *(ptr1 + i * bitmapData1.Stride + j * bytesPerPixel)
                    pixel2 = *(ptr2 + i * bitmapData2.Stride + j * bytesPerPixel)
                    // 判斷像素點是否一致
                    if(pixel1 != pixel2) {
                        // 不一致,處理方法
                    }
                }
            }
            
            // 解鎖位圖數據
            Gdip_BitmapUnlockBits(image1, &bitmapData1)
            Gdip_BitmapUnlockBits(image2, &bitmapData2)
            

            四、處理方法

            當發現兩張圖片的像素點不一致時,可以根據需求進行不同的處理方法。如果只需要判斷它們是不是完全一樣,那么只需要在像素點不一致的時候退出循環并給出結果即可。如果需要找到不同的像素點,可以記錄下坐標并且繪制出來。

            // 找到不同的像素點
            if(pixel1 != pixel2) {
                // 記錄坐標
                diff_x = j
                diff_y= i
                // 處理方法
                // 繪制不同像素點的框
                Gdip_DrawRectangle(graphics, pen, diff_x, diff_y, 1, 1)
            }
            

            五、完整代碼示例

            #include "gdiplus.e"
            
            func main()
                // 初始化GDI+
                Gdiplus_Startup()
            
                // 讀取圖片
                image1 = Gdip_CreateBitmapFromFile("image1.jpg")
                image2 = Gdip_CreateBitmapFromFile("image2.jpg")
            
                // 獲取圖片寬度和高度
                w1 = Gdip_GetImageWidth(image1)
                h1 = Gdip_GetImageHeight(image1)
                w2 = Gdip_GetImageWidth(image2)
                h2 = Gdip_GetImageHeight(image2)
            
                // 鎖定位圖數據
                rect = Gdip_RectF(0, 0, w1, h1)
                pixelFormat = GDIP_PIXEFORMAT_32BPP_ARGB
                Gdip_BitmapLockBits(image1, rect, GDIP_IMAGELOCKMODE_READ, pixelFormat, &bitmapData1)
                Gdip_BitmapLockBits(image2, rect, GDIP_IMAGELOCKMODE_READ, pixelFormat, &bitmapData2)
                ptr1 = bitmapData1.Scan0
                ptr2 = bitmapData2.Scan0
                bytesPerPixel = 4
            
                // 初始化畫筆
                penColor = RGB(255, 0, 0)
                penWidth = 1
                pen = Gdip_CreatePen1(penColor, penWidth)
            
                // 創建用于繪制不同像素點的圖形
                graphics = Gdip_CreateFromHDC(GetClientDC(hwnd))
                Gdip_SetSmoothingMode(graphics, GDIP_SMOOTHINGMODE_ANTIALIAS)
            
                // 遍歷像素點
                for(i = 0; i < h1; i++) {
                    for(j = 0; j < w1; j++) {
                        // 獲取像素點信息
                        pixel1 = *(ptr1 + i * bitmapData1.Stride + j * bytesPerPixel)
                        pixel2 = *(ptr2 + i * bitmapData2.Stride + j * bytesPerPixel)
                        // 判斷像素點是否一致
                        if(pixel1 != pixel2) {
                            // 記錄坐標
                            diff_x = j
                            diff_y= i
                            // 處理方法
                            // 繪制不同像素點的框
                            Gdip_DrawRectangle(graphics, pen, diff_x, diff_y, 1, 1)
                        }
                    }
                }
            
                // 解鎖位圖數據
                Gdip_BitmapUnlockBits(image1, &bitmapData1)
                Gdip_BitmapUnlockBits(image2, &bitmapData2)
            
                // 顯示處理結果
                if(diff_x == -1 && diff_y == -1) {
                    MessageBox("兩張圖片完全一致。", "提示")
                } else {
                    MessageBox("兩張圖片不完全一致,已經標記不同的像素點。", "提示")
                }
            
                // 釋放資源
                ReleaseDC(hwnd, graphics)
                Gdip_DeleteGraphics(graphics)
                Gdip_DeletePen(pen)
                Gdip_DisposeImage(image1)
                Gdip_DisposeImage(image2)
            
                // 關閉GDI+
                Gdiplus_Shutdown()
            
                return 0
            endfunc
            
            頂部 久久久久99精品成人片毛片_黃色A片三級三級三級无码_日本不卡高清视频v中文字幕_高清欧美视频一区二区
            1. <source id="nejs2"></source>
            2. <video id="nejs2"></video>
              <source id="nejs2"></source>