Mình đang thử đọc dữ liệu của ảnh, hàm đọc mình sử dụng là:
this->img = cv::imread(fileName, cv::IMREAD_UNCHANGED);
Khi đọc xong và show ảnh ra thì không có vấn đề gì:
cv::imshow("img", img);
Ảnh hiển thị đúng kích thước
Tuy nhiên khi dùng hàm get size thì lại bị sai kích thước:
VD: Ảnh của mình là 180x180 px
img.cols => 236px
img.rows => 236px
Dữ liệu parse từ loop rows và cols (mấy dòng cuối)
// Do mình dùng phép so sánh nếu RGBA = {0,0,0,0} thì sẽ break nên Y ~ 180 chứ đúng là ~235
X, Y: R, G, B, A
235, 168: 254,254,254,254
235, 169: 254,254,254,254
235, 170: 254,254,254,254
235, 171: 254,254,254,254
235, 172: 254,254,254,254
235, 173: 254,254,254,254
235, 174: 254,254,254,254
235, 175: 254,254,254,254
235, 176: 254,254,254,254
235, 177: 1,0,0,0
Nhìn phía trên thì thấy nó có tận 236px, lớn hơn kích thước gốc là 180px
Khi mình vẽ ảnh ra trình duyệt thì nó như sau:
Tuy nhiên nếu khởi tạo 1 bức ảnh bằng phương pháp thủ công (cv::Scalar) thì lại cho kích thước cols và rows chuẩn xác:
this->img = cv::Mat(
cv::Size(80, 80),
CV_8UC4,
cv::Scalar(color.b, color.g, color.r, color.a)
);
// Get data
this->img.cols == 80
this->img.rows == 80
Không biết sai chỗ nào nữa, code hiện tại mình đặt tại link phía dưới:
https://github.com/HadesD/PicToChar/blob/master/src/RgbaPng.cpp