FAQ TBarCode DLL / TBarCode Library
Comment créer un bitmap avec une largeur de module spécifique ?
Comment créer un bitmap avec une largeur de module spécifique ?
Dans le code ci-dessous, vous définissez simplement la largeur de module en [mm] et la hauteur totale du code-barres en [mm]. Via l'indicateur optimizeToDPI, vous pouvez également ajouter une optimisation de la largeur de module (vous obtenez en fait le même résultat qu'avec BCGetOptimalBitmapSize). L'exemple de code concerne les codes-barres linéaires, mais peut être adapté aux codes 2D également.
Appelez ceci après BCCreate (..)
double moduleWidthUserMM = 0.26; double heightUserMM = 22.0; double dpi = 600; int widthUserPx = 1; // dummy value, since the width of the bar code is determined by the module width int heightUserPx = dpi * heightUserMM / 25.4; // for bitmaps we need [Pixel] double width, height; bool optimizeToDPI = TRUE; // adapt module width to next lower full Pixels => avoid quantization errors int fontSizePt = (int)(0.51 + (10 * moduleWidthUserMM / 0.339)); // auto font size - works well with EAN / Code-128 / Code 39 // bounding rectangle of barcode -> desired drawing coordinates RECT rect; rect.left = 0; rect.right = widthUserPx; rect.top = 0; rect.bottom = heightUserPx; eCode = BCSetDPI(pBarCode, dpi, dpi); eCode = BCSetIgnoreDpiFromDC(pBarCode, TRUE); // Ensure that the width of a bar is a multiple of a single pixel (and at minimum one pixel) eCode = BCSetOptResolution(pBarCode, optimizeToDPI); // bar code should adapt to module width eCode = BCSetSizeMode(pBarCode, e_SizeMode::eSizeMode_CustomModuleWidth); // set module width in [0.001mm] // we need a rounding delta of 0.001mm in case of optimize flag eCode = BCSetModWidthN(pBarCode, moduleWidthUserMM * 1000 + (optimizeToDPI?1:0)); eCode = BCSetFontHeight(pBarCode, fontSizePt); // Calculate bar code size // for retrieving the size in [Pixel] we need a screen hDC HDC hDC = GetDC(NULL); eCode = BCGetBarcodeSize(pBarCode, &rect, hDC, eMUPixel, &width, &height); if (hDC) DeleteDC(hDC); // Save bitmap with the given module width and size eCode = BCSaveImage(pBarCode, "C:\\Temp\\Barcode-600dpi.jpg", eIMJpg, (int) (width + 0.5), (int) (height + 0.5), dpi, dpi);
En raison de l'activation de l'indicateur d'optimisation, avec une largeur de module donnée de 0,26 mm, la largeur de module résultante sera de 0,254 mm (6 pixels à 600 dpi).