Mencetak gambar dengan wxWidgets

Mencetak gambar, dicampur dengan teks, merupakan persyaratan umum. Hanya memikirkan mencetak logo pelanggan pada faktur.Mencetak gambar pada ukuran diberikan dalam wxWidgets telah menjadi tugas yang agak sulit, terutama untuk kurangnya dokumentasi atau contoh. Setelah beberapa trial and error saya menemukan solusi kerja dan saya akan mendeskripsikannya di sini.Solusi ini berdasarkan apa yang saya dijelaskan untuk mencetak teks . Anda akan perlu untuk membaca posting itu juga. 



1 - Load foto dalam objek wxImage, mengubah ukurannya, mengubahnya menjadi suatu wxBitmap. Anda perlu untuk mengubah ukuran gambar sehingga Anda dapat mencetak piksel demi piksel dan mendapatkan gambar dicetak dengan ukuran yang diinginkan. Untuk menentukan ukuran gambar yang Anda perlu tahu ukuran cetak yang diinginkan atau DPI gambar. Anda dapat mengetahui resolusi printer menggunakan wxDC:: GetPPI () . Mulai dari ukuran gambar asli dan resolusi printer Anda dapat menghitung ukuran gambar baru dan rescale itu. Jika Anda tahu gambar itu DPI Anda dapat menghitung ukuran gambar baru dalam pixel menggunakan rumus ini:



newWidth_pixels = printerPPI / imageDPI * originalWidth_pixels

Jika Anda tahu lebar gambar dicetak (dalam mm) yang Anda ingin mendapatkan Anda dapat menghitung ukuran gambar baru dalam piksel menggunakan rumus ini:


newWidth_pixels =  printedWidth_mm * PPI / 25.4


 2 - Cetak bitmap, memastikan bahwa wxWidgets tidak mengubah ukurannya . Ini adalah bagian sulit, karena saya berakhir dengan gambar yang lebih besar daripada apa yang saya inginkan.Masalahnya adalah bahwa saya mengatur skala pengguna dengan wxDC:: SetUserScale () dan skala yang juga diterapkan pada gambar, memperbesarnya. Solusinya adalah, jelas, untuk mengatur skala pengguna untuk 1 sebelum menggambar bitmap. Berikut adalah fungsi yang saya gunakan untuk tujuan (x dan y adalah mencetak koordinat dalam mm):


void PrintBitmap( wxDC *dc, const float logUnitsFactor, wxBitmap &bitmap, const float x, const float y )
{
        double xScale, yScale;
        dc->GetUserScale( &xScale, &yScale );
        dc->SetUserScale( 1, 1 );
        dc->DrawBitmap( bitmap, x*logUnitsFactor*xScale, y*logUnitsFactor*yScale, true );
        dc->SetUserScale( xScale, yScale );
}

Sumber: http://accountingplusplus.blogspot.com/2011/09/printing-images-with-wxwidgets.html

0 ɹɐʇuǝɯoʞ: