diff --git a/core/fxcodec/bmp/cfx_bmpdecompressor.cpp b/core/fxcodec/bmp/cfx_bmpdecompressor.cpp
index 63aa145..e727147 100644
--- a/core/fxcodec/bmp/cfx_bmpdecompressor.cpp
+++ b/core/fxcodec/bmp/cfx_bmpdecompressor.cpp
@@ -61,9 +61,10 @@
   longjmp(jmpbuf_, 1);
 }
 
-void CFX_BmpDecompressor::ReadScanline(uint32_t row_num,
-                                       const std::vector<uint8_t>& row_buf) {
-  context_->m_pDelegate->BmpReadScanline(row_num, row_buf);
+void CFX_BmpDecompressor::ReadNextScanline() {
+  uint32_t row = img_tb_flag_ ? row_num_ : (height_ - 1 - row_num_);
+  context_->m_pDelegate->BmpReadScanline(row, out_row_buffer_);
+  ++row_num_;
 }
 
 bool CFX_BmpDecompressor::GetDataPosition(uint32_t rcd_pos) {
@@ -440,8 +441,7 @@
       if (!ValidateColorIndex(byte))
         return 0;
     }
-    ReadScanline(img_tb_flag_ ? row_num_++ : (height_ - 1 - row_num_++),
-                 out_row_buffer_);
+    ReadNextScanline();
   }
   SaveDecodingStatus(DecodeStatus::kTail);
   return 1;
@@ -467,19 +467,15 @@
               NOTREACHED();
             }
 
-            ReadScanline(img_tb_flag_ ? row_num_++ : (height_ - 1 - row_num_++),
-                         out_row_buffer_);
+            ReadNextScanline();
             col_num_ = 0;
             std::fill(out_row_buffer_.begin(), out_row_buffer_.end(), 0);
             SaveDecodingStatus(DecodeStatus::kData);
             continue;
           }
           case kRleEoi: {
-            if (row_num_ < height_) {
-              ReadScanline(
-                  img_tb_flag_ ? row_num_++ : (height_ - 1 - row_num_++),
-                  out_row_buffer_);
-            }
+            if (row_num_ < height_)
+              ReadNextScanline();
             SaveDecodingStatus(DecodeStatus::kTail);
             return 1;
           }
@@ -497,9 +493,7 @@
 
             while (row_num_ < bmp_row_num__next) {
               std::fill(out_row_buffer_.begin(), out_row_buffer_.end(), 0);
-              ReadScanline(
-                  img_tb_flag_ ? row_num_++ : (height_ - 1 - row_num_++),
-                  out_row_buffer_);
+              ReadNextScanline();
             }
             break;
           }
@@ -571,19 +565,15 @@
               NOTREACHED();
             }
 
-            ReadScanline(img_tb_flag_ ? row_num_++ : (height_ - 1 - row_num_++),
-                         out_row_buffer_);
+            ReadNextScanline();
             col_num_ = 0;
             std::fill(out_row_buffer_.begin(), out_row_buffer_.end(), 0);
             SaveDecodingStatus(DecodeStatus::kData);
             continue;
           }
           case kRleEoi: {
-            if (row_num_ < height_) {
-              ReadScanline(
-                  img_tb_flag_ ? row_num_++ : (height_ - 1 - row_num_++),
-                  out_row_buffer_);
-            }
+            if (row_num_ < height_)
+              ReadNextScanline();
             SaveDecodingStatus(DecodeStatus::kTail);
             return 1;
           }
@@ -601,9 +591,7 @@
 
             while (row_num_ < bmp_row_num__next) {
               std::fill(out_row_buffer_.begin(), out_row_buffer_.end(), 0);
-              ReadScanline(
-                  img_tb_flag_ ? row_num_++ : (height_ - 1 - row_num_++),
-                  out_row_buffer_);
+              ReadNextScanline();
             }
             break;
           }
diff --git a/core/fxcodec/bmp/cfx_bmpdecompressor.h b/core/fxcodec/bmp/cfx_bmpdecompressor.h
index 1f88c73..5144b98 100644
--- a/core/fxcodec/bmp/cfx_bmpdecompressor.h
+++ b/core/fxcodec/bmp/cfx_bmpdecompressor.h
@@ -49,7 +49,7 @@
   };
 
   bool GetDataPosition(uint32_t cur_pos);
-  void ReadScanline(uint32_t row_num, const std::vector<uint8_t>& row_buf);
+  void ReadNextScanline();
   int32_t DecodeRGB();
   int32_t DecodeRLE8();
   int32_t DecodeRLE4();
@@ -77,8 +77,8 @@
   int32_t pal_type_ = 0;
   uint32_t data_size_ = 0;
   uint32_t img_ifh_size_ = 0;
-  size_t row_num_ = 0;
-  size_t col_num_ = 0;
+  uint32_t row_num_ = 0;
+  uint32_t col_num_ = 0;
   int32_t dpi_x_ = 0;
   int32_t dpi_y_ = 0;
   uint32_t mask_red_ = 0;
